Skip to content

feat(server): add aclose() to drain ActiveTask background tasks (#1101) - #1105

Merged
mykytanetipa merged 3 commits into
a2aproject:mainfrom
astrogilda:fix/active-task-registry-aclose-1101
Jul 20, 2026
Merged

mykytanetipa merged 3 commits into
a2aproject:mainfrom
astrogilda:fix/active-task-registry-aclose-1101

Conversation

@astrogilda

Copy link
Copy Markdown
Contributor

Summary

Adds a public aclose() teardown to ActiveTask, ActiveTaskRegistry, and
DefaultRequestHandlerV2 that force-drains the SDK-owned producer, consumer,
and dispatcher asyncio.Tasks so none are left pending at event-loop shutdown.

  • ActiveTask.aclose() force-closes both event queues and cancels the producer
    and consumer tasks, then awaits them. It sets _is_finished under _lock, so
    it is mutually exclusive with start() (which refuses to spawn once
    _is_finished is set).
  • ActiveTaskRegistry.aclose() marks the registry closed so get_or_create
    refuses new work, drains every active task, then awaits the in-flight
    _remove_task cleanup tasks. The lock is released before awaiting because
    _remove_task re-acquires it.
  • DefaultRequestHandlerV2.aclose() delegates to the registry drain, for wiring
    into an ASGI lifespan / on_shutdown hook.

Why

Fixes #1101. At shutdown the ActiveTask producer can stay pending and surface
as Task was destroyed but it is pending!. The producer's finally calls
_event_queue_subscribers.close(immediate=False), which awaits join() on
every subscriber sink; an abandoned subscriber leaves an undrained sink, so the
join() never returns and the producer hangs. There is no public way to drain
these background tasks today. aclose() closes the queues with immediate=True,
which releases the wedged producer, and reaps the tasks.

The teardown always forces rather than exposing a graceful immediate=False
option, because that path inherits the documented close(immediate=False)
deadlock and a shutdown hook must be bounded.

Test plan

  • uv run pytest tests/server/agent_execution/ tests/server/request_handlers/ tests/server/events/ — pass
  • uv run pytest --cov=a2a --cov-fail-under=88 — pass
  • ./scripts/lint.sh — ruff, ruff-format, and ty clean

New tests cover the registry drain, idempotency, empty registry, new-work
rejected after close, and an errored task being logged rather than propagated;
ActiveTask reaping a running producer and force-closing past an undrained
subscriber (the #1101 repro); and the handler drain.

Fixes #1101 🦕

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces aclose() methods to ActiveTask, ActiveTaskRegistry, and DefaultRequestHandlerV2 to facilitate a bounded, force-closed teardown of background tasks and queues during server shutdown, preventing pending task warnings. It also adds comprehensive unit tests to verify the teardown behavior, idempotency, and error handling. The review feedback suggests explicitly shutting down self._request_queue in ActiveTask.aclose() to ensure proper cleanup of all queues if start() was never called or failed early.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread src/a2a/server/agent_execution/active_task.py
@github-actions

github-actions Bot commented Jun 14, 2026 •

Copy link
Copy Markdown

🧪 Code Coverage (vs main)

⬇️ Download Full Report

Base PR Delta
src/a2a/server/agent_execution/active_task.py 95.32% 95.09% 🔴 -0.24%
src/a2a/server/agent_execution/active_task_registry.py 93.75% 96.61% 🟢 +2.86%
src/a2a/server/events/event_queue_v2.py 91.19% 91.28% 🟢 +0.09%
src/a2a/server/request_handlers/default_request_handler_v2.py 94.12% 94.17% 🟢 +0.05%
Total 92.95% 92.97% 🟢 +0.02%

Generated by coverage-comment.yml

@astrogilda
astrogilda force-pushed the fix/active-task-registry-aclose-1101 branch from 403fe48 to 7e42e06 Compare June 24, 2026 04:28
@astrogilda

Copy link
Copy Markdown
Contributor Author

Addressed the review suggestion: aclose() now shuts down _request_queue (immediate=True) first, covering the never-started case, with a test. CI is green on the new push. Ready for review whenever you have a moment @rohityan.

@astrogilda

Copy link
Copy Markdown
Contributor Author

Rebased onto current main to clear the "behind" state after #1053 and the recent refactors. No content changes, and the full suite is green on the rebased branch.

Quick recap of where things stand: the approach was agreed in #1101 (thanks @rohityan), the one review finding (never-started request queue) is addressed with a test, and CI has been green since the July push. Ready for review whenever you have a moment.

@astrogilda
astrogilda force-pushed the fix/active-task-registry-aclose-1101 branch from 5347d4b to da13286 Compare July 15, 2026 22:37
Comment thread src/a2a/server/agent_execution/active_task.py
@astrogilda
astrogilda force-pushed the fix/active-task-registry-aclose-1101 branch from 0728696 to cd52b14 Compare July 19, 2026 23:19
@astrogilda

Copy link
Copy Markdown
Contributor Author

@mykytanetipa Your finding is addressed in 0728696: the drain now happens at the root in EventQueueSource.close(), so every caller gets the guarantee, and there's a regression test for the subscriber-less immediate-close case. Pushed on the 17th, the day after your changes-requested review; details in the thread reply above.

The branch has also been rebased onto current main (the 1.1.1 release commit) with no content changes to the three PR commits, and the touched-area suite and ruff are clean.

Requesting a re-review, since the change this review asked for was pushed on the 17th and is in the current head.

@mykytanetipa

Copy link
Copy Markdown
Collaborator

@astrogilda thank you for the quick fix, I see that tests/server/agent_execution/test_active_task.py is conflicting with main. Can you please resolve it?

…roject#1101)

At shutdown the ActiveTask producer can stay pending and surface as
"Task was destroyed but it is pending!". The producer's finally closes the
subscriber queue with immediate=False, which joins every subscriber sink; an
abandoned subscriber leaves an undrained sink so the join never returns and
the producer hangs. No public API drains these background tasks today.

Add aclose() to ActiveTask, ActiveTaskRegistry, and DefaultRequestHandlerV2.
It force-closes the event queues (immediate=True), which releases the wedged
producer, then cancels and awaits the producer and consumer tasks. ActiveTask
sets _is_finished under _lock so it is mutually exclusive with start(); the
registry marks itself closed so get_or_create refuses new work during
teardown, closing the orphan-task race.

Fixes a2aproject#1101
If start() was never called, the producer and consumer finally blocks
that normally shut down _request_queue never run, so a caller parked in
enqueue_request() would never be released. Shut the queue down first in
aclose(), mirroring the producer's finally ordering.
EventQueueSource.close() cancelled its dispatcher task but only awaited the
sinks, so a source with no sinks (create_default_sink=False and no taps)
returned with the cancelled dispatcher still pending, producing "Task was
destroyed but it is pending!". aclose() calls close() on both sources, so it
hit this for the subscriber-less _event_queue_subscribers.

Await the dispatcher after cancelling it, suppressing both the expected
CancelledError and any error it raised while shutting down: close() is teardown
(reachable from __aexit__) and must not raise, and _dispatch_loop already logs
its own exceptions, so a dispatcher failure stays observable without
propagating out of close().
@astrogilda
astrogilda force-pushed the fix/active-task-registry-aclose-1101 branch from cd52b14 to e135ce9 Compare July 20, 2026 13:02
@astrogilda

astrogilda commented Jul 20, 2026 •

Copy link
Copy Markdown
Contributor Author

@mykytanetipa Done. Rebased onto current main and fixed the overlap in that test file. The teardown-warning test arunmm8335 landed in #1122 and our three drain tests cover different paths, so I kept all four. Green here: agent_execution plus request_handlers, 131 passed, ruff clean.

@rohityan if you get a minute: this is the third rebase forced by unrelated edits to the same test file (#1053, then #1122). We settled the design in #1101 and the one review note is handled, so a merge would spare us the next round. Happy to turn around anything you flag.

Edited 2026-08-20 to fix an attribution. The teardown-warning test in #1122 is arunmm8335's work, not mykytanetipa's; this said "your test" to the wrong person.

@mykytanetipa
mykytanetipa merged commit 9801f46 into a2aproject:main Jul 20, 2026
14 checks passed
msampathkumar pushed a commit that referenced this pull request Jul 22, 2026
🤖 I have created a release *beep* *boop*
---


##
[1.1.2](v1.1.1...v1.1.2)
(2026-07-20)


### Features

* **server:** add aclose() to drain ActiveTask background tasks
([#1101](#1101))
([#1105](#1105))
([9801f46](9801f46))


### Bug Fixes

* **agent_execution:** resolve ActiveTask 'destroyed but pending'
warning during teardown
([#1122](#1122))
([d19c4d2](d19c4d2))
* persist early producer failure as FAILED with originating message
([#1106](#1106))
([4e3d724](4e3d724))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
Hemanth95 pushed a commit to Hemanth95/a2a-python that referenced this pull request Sep 30, 2026
Bumps the all group with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [protobuf](https://github.com/protocolbuffers/protobuf) | `6.33.4` |
`6.33.5` |
| [cryptography](https://github.com/pyca/cryptography) | `46.0.3` |
`46.0.4` |
| [grpcio-tools](https://github.com/grpc/grpc) | `1.74.0` | `1.76.0` |
| [grpcio-reflection](https://grpc.io) | `1.74.0` | `1.76.0` |
| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.10.1` | `2.11.0` |
| [ruff](https://github.com/astral-sh/ruff) | `0.14.13` | `0.14.14` |

Updates `protobuf` from 6.33.4 to 6.33.5
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/protocolbuffers/protobuf/releases">protobuf's
releases</a>.</em></p>
<blockquote>
<h2>Protocol Buffers v34.0-rc1</h2>
<h1>Announcements</h1>
<ul>
<li><strong>This version includes breaking changes to: C++, Objective-C,
PHP, Python.</strong></li>
<li>[Bazel] Remove deprecated ProtoInfo.transitive_imports. Use
equivalent transitive_sources instead (<a
href="https://github.com/protocolbuffers/protobuf/commit/0a5c2f6b633c1e5259f566cb42d30fe347b8aadb">https://github.com/protocolbuffers/protobuf/commit/0a5c2f6b633c1e5259f566cb42d30fe347b8aadb</a>)</li>
<li>[C++] Make generator headers private (<a
href="https://github.com/protocolbuffers/protobuf/commit/3a2af3510f0d454dbe3e4dc281674b61c4d20b9e">https://github.com/protocolbuffers/protobuf/commit/3a2af3510f0d454dbe3e4dc281674b61c4d20b9e</a>)</li>
<li>[C++] Add a debug check that the target of CopyFrom is not a
descendant of the source. (<a
href="https://github.com/protocolbuffers/protobuf/commit/7a7589823d2cfaaf7994b050e98d5d553bc9b1c1">https://github.com/protocolbuffers/protobuf/commit/7a7589823d2cfaaf7994b050e98d5d553bc9b1c1</a>)</li>
<li>[C++] Add [[nodiscard]] to many APIs. (<a
href="https://github.com/protocolbuffers/protobuf/commit/a70115f33f9af2c4b2202c800b84837e7fe0d738">https://github.com/protocolbuffers/protobuf/commit/a70115f33f9af2c4b2202c800b84837e7fe0d738</a>)</li>
<li>[C++] Make the arena-enabled constructors of
<code>RepeatedField</code>, <code>RepeatedPtrField</code>, and
<code>Map</code> private. (<a
href="https://github.com/protocolbuffers/protobuf/commit/ef890c3d0c79398c70e047fe5dd893f460ba2336">https://github.com/protocolbuffers/protobuf/commit/ef890c3d0c79398c70e047fe5dd893f460ba2336</a>)</li>
<li>[C++] Remove deprecated FieldDescriptor::label() in OSS. Use
is_repeated() or is_required() instead (<a
href="https://github.com/protocolbuffers/protobuf/commit/b76faa921fdd244f374c7be0bddd4050fc42c292">https://github.com/protocolbuffers/protobuf/commit/b76faa921fdd244f374c7be0bddd4050fc42c292</a>)</li>
<li>[C++] Removes proto2::util::MessageDifferencer::AddIgnoreCriteria
that takes a raw pointer as an argument in favor of the overload that
takes a unique_ptr. Remove macro
PROTOBUF_FUTURE_REMOVE_ADD_IGNORE_CRITERIA (<a
href="https://github.com/protocolbuffers/protobuf/commit/b115358c64127896fed88b8b5ef5d91d86d8cbae">https://github.com/protocolbuffers/protobuf/commit/b115358c64127896fed88b8b5ef5d91d86d8cbae</a>)</li>
<li>[C++] Remove deprecated FieldDescriptor::has_optional_keyword() in
OSS. Use is_repeated() or has_presence() instead (<a
href="https://github.com/protocolbuffers/protobuf/commit/68346ec9348e932664e58c3ecdcd1478f95233a8">https://github.com/protocolbuffers/protobuf/commit/68346ec9348e932664e58c3ecdcd1478f95233a8</a>)</li>
<li>[C++] Remove AddUnusedImportTrackFile() and
ClearUnusedImportTrackFiles(). Remove
PROTOBUF_FUTURE_RENAME_ADD_UNUSED_IMPORT (<a
href="https://github.com/protocolbuffers/protobuf/commit/837a2cd1d6c75402b2503ffe7cd8aeaf25868536">https://github.com/protocolbuffers/protobuf/commit/837a2cd1d6c75402b2503ffe7cd8aeaf25868536</a>)</li>
<li>[C++] Remove deprecated FieldDescriptor::is_optional() in OSS. Use
(!is_required() &amp;&amp; !is_repeated()) instead (<a
href="https://github.com/protocolbuffers/protobuf/commit/9dbc5d479a8e453921485d8d3de47fb3c005f1af">https://github.com/protocolbuffers/protobuf/commit/9dbc5d479a8e453921485d8d3de47fb3c005f1af</a>)</li>
<li>[C++] Remove deprecated UseDeprecatedLegacyJsonFieldConflicts() (<a
href="https://github.com/protocolbuffers/protobuf/commit/c301c2ca286327a21c50c0c4cd877afc9c655b00">https://github.com/protocolbuffers/protobuf/commit/c301c2ca286327a21c50c0c4cd877afc9c655b00</a>)</li>
<li>[C++] All entity names have length limit (2afb0dc)</li>
<li>[ObjC] Remove <code>generate_minimal_imports</code> generation
option warning (<a
href="https://github.com/protocolbuffers/protobuf/commit/45b1297fdaad5a9436d0e207422168c38dc45ac4">https://github.com/protocolbuffers/protobuf/commit/45b1297fdaad5a9436d0e207422168c38dc45ac4</a>)</li>
<li>[ObjC] Fix nullability annotations on some
<code>GPB*Dictionary</code> types. (<a
href="https://github.com/protocolbuffers/protobuf/commit/ea67d6d26a48478a567c404679e3bb99cf230d50">https://github.com/protocolbuffers/protobuf/commit/ea67d6d26a48478a567c404679e3bb99cf230d50</a>)</li>
<li>[ObjC] Remove <code>-[GPBFieldDescriptor optional]</code> (<a
href="https://github.com/protocolbuffers/protobuf/commit/3414dc151eb4dcbdb2ca952e2589993bf7af75c4">https://github.com/protocolbuffers/protobuf/commit/3414dc151eb4dcbdb2ca952e2589993bf7af75c4</a>)</li>
<li>[Other] Remove deprecated flag for enabling MSVC support (<a
href="https://github.com/protocolbuffers/protobuf/commit/97c979be6e0907e1051bee62584dac4594e73fa7">https://github.com/protocolbuffers/protobuf/commit/97c979be6e0907e1051bee62584dac4594e73fa7</a>)</li>
<li>[PHP] Remove deprecated PHP APIs (<a
href="https://github.com/protocolbuffers/protobuf/commit/9c45014099a4f7004fab6dd1278de2f4f2a393c5">https://github.com/protocolbuffers/protobuf/commit/9c45014099a4f7004fab6dd1278de2f4f2a393c5</a>)</li>
<li>[PHP] Remove deprecated PHP APIs FieldDescriptor getLabel, use
IsRepeated or isRequired instead. (<a
href="https://github.com/protocolbuffers/protobuf/commit/42081219920c6fad17ba6ddd1e28d111bcfb3345">https://github.com/protocolbuffers/protobuf/commit/42081219920c6fad17ba6ddd1e28d111bcfb3345</a>,
<a
href="https://github.com/protocolbuffers/protobuf/commit/cd76e675b14d00dda5623b30835d2bc7105fccc6">https://github.com/protocolbuffers/protobuf/commit/cd76e675b14d00dda5623b30835d2bc7105fccc6</a>,
<a
href="https://github.com/protocolbuffers/protobuf/commit/42081219920c6fad17ba6ddd1e28d111bcfb3345">https://github.com/protocolbuffers/protobuf/commit/42081219920c6fad17ba6ddd1e28d111bcfb3345</a>)</li>
<li>[PHP] Add PHP typehints for setters and remove redundant GPBUtil
checks (<a
href="https://redirect.github.com/protocolbuffers/protobuf/pull/25296">protocolbuffers/protobuf#25296</a>)
(<a
href="https://github.com/protocolbuffers/protobuf/commit/aee03b78929c02461a5f9d8e136a2a016359b0cd">https://github.com/protocolbuffers/protobuf/commit/aee03b78929c02461a5f9d8e136a2a016359b0cd</a>)</li>
<li>[PHP] support default values for editions/proto2 (<a
href="https://redirect.github.com/protocolbuffers/protobuf/pull/25161">protocolbuffers/protobuf#25161</a>)
(<a
href="https://github.com/protocolbuffers/protobuf/commit/b01099d56350551bae3da88b97bf3027274c9f17">https://github.com/protocolbuffers/protobuf/commit/b01099d56350551bae3da88b97bf3027274c9f17</a>)</li>
<li>[Python] Raise errors in OSS when assign bool to int/enum field in
Python Proto. (<a
href="https://github.com/protocolbuffers/protobuf/commit/5b116fe2f14f49dd0cc3b76089983717f211025c">https://github.com/protocolbuffers/protobuf/commit/5b116fe2f14f49dd0cc3b76089983717f211025c</a>)</li>
<li>[Python] Remove float_format/double_format from python proto
text_format (<a
href="https://github.com/protocolbuffers/protobuf/commit/e4854a186e0bfa867d5bfa5cd850608a948fd488">https://github.com/protocolbuffers/protobuf/commit/e4854a186e0bfa867d5bfa5cd850608a948fd488</a>)</li>
<li>[Python] Raise TypeError when convert non-timedelta to Duration, or
convert non-datetime to Timestamp in python proto. (Original code may
raise ArributeError) (<a
href="https://github.com/protocolbuffers/protobuf/commit/00aaca1b4d98954bc2933d7c8a5379ba6088124c">https://github.com/protocolbuffers/protobuf/commit/00aaca1b4d98954bc2933d7c8a5379ba6088124c</a>)</li>
<li>[Python] Remove float_precision from python proto json_format (<a
href="https://github.com/protocolbuffers/protobuf/commit/f027f1fcd52b9d080b7ee79f4024f53cf54e0dc5">https://github.com/protocolbuffers/protobuf/commit/f027f1fcd52b9d080b7ee79f4024f53cf54e0dc5</a>)</li>
<li>[Python] Remove deprecated FieldDescriptor::label() in OSS. Use
is_repeated() or is_required() instead (<a
href="https://github.com/protocolbuffers/protobuf/commit/b76faa921fdd244f374c7be0bddd4050fc42c292">https://github.com/protocolbuffers/protobuf/commit/b76faa921fdd244f374c7be0bddd4050fc42c292</a>)</li>
<li>[Python] Remove deprecated FieldDescriptor.label (<a
href="https://github.com/protocolbuffers/protobuf/commit/0a8ff55518ea5874478ad5b26515b31d186045a9">https://github.com/protocolbuffers/protobuf/commit/0a8ff55518ea5874478ad5b26515b31d186045a9</a>)</li>
<li>[Python] Remove deprecated UseDeprecatedLegacyJsonFieldConflicts()
(<a
href="https://github.com/protocolbuffers/protobuf/commit/c301c2ca286327a21c50c0c4cd877afc9c655b00">https://github.com/protocolbuffers/protobuf/commit/c301c2ca286327a21c50c0c4cd877afc9c655b00</a>)</li>
<li><a href="https://protobuf.dev/news/">Protobuf News</a> may include
additional announcements or pre-announcements for upcoming changes.</li>
<li><a href="https://protobuf.dev/support/migration/">Migration
Guide</a> may include additional guidance for breaking changes.</li>
</ul>
<h1>Bazel</h1>
<ul>
<li>Fix: cc_toolchain should prefer protoc when prebuilt flag is
flipped. (<a
href="https://redirect.github.com/protocolbuffers/protobuf/issues/25168">#25168</a>)
(<a
href="https://github.com/protocolbuffers/protobuf/commit/8c857c3a1c6a106b0a096f1c9fa504bfaca035a9">https://github.com/protocolbuffers/protobuf/commit/8c857c3a1c6a106b0a096f1c9fa504bfaca035a9</a>)</li>
<li>Breaking change: Remove deprecated ProtoInfo.transitive_imports. Use
equivalent transitive_sources instead (<a
href="https://github.com/protocolbuffers/protobuf/commit/0a5c2f6b633c1e5259f566cb42d30fe347b8aadb">https://github.com/protocolbuffers/protobuf/commit/0a5c2f6b633c1e5259f566cb42d30fe347b8aadb</a>)</li>
<li>Feat(bazel): wire up prebuilt protoc toolchain (<a
href="https://redirect.github.com/protocolbuffers/protobuf/issues/24115">#24115</a>)
(<a
href="https://github.com/protocolbuffers/protobuf/commit/cc23698b486e690ea2eb873cc7596a87c74a3ba6">https://github.com/protocolbuffers/protobuf/commit/cc23698b486e690ea2eb873cc7596a87c74a3ba6</a>)</li>
<li>Migrate <code>proto_descriptor_set</code> (<a
href="https://redirect.github.com/protocolbuffers/protobuf/issues/23369">#23369</a>)
(<a
href="https://github.com/protocolbuffers/protobuf/commit/8d4dfdd39a7a242a9ed631a6ab2192c57dd9b9c8">https://github.com/protocolbuffers/protobuf/commit/8d4dfdd39a7a242a9ed631a6ab2192c57dd9b9c8</a>)</li>
</ul>
<h1>Compiler</h1>
<ul>
<li>Ruby codegen: support generation of rbs files (<a
href="https://redirect.github.com/protocolbuffers/protobuf/issues/15633">#15633</a>)
(<a
href="https://github.com/protocolbuffers/protobuf/commit/6ebdf851ba78728f0aa145d38454ed9a316fb08d">https://github.com/protocolbuffers/protobuf/commit/6ebdf851ba78728f0aa145d38454ed9a316fb08d</a>)</li>
<li>Avoid collision name problems between a message named
<code>Xyz</code> and a direct sibling enum named <code>XyzView</code>
(<a
href="https://github.com/protocolbuffers/protobuf/commit/eba53e8f172b273d679759a72ce4250131ee3df1">https://github.com/protocolbuffers/protobuf/commit/eba53e8f172b273d679759a72ce4250131ee3df1</a>)</li>
<li>Generalizing and implementing ValidateFeatureSupport for both
Options and Features during proto parsing (<a
href="https://github.com/protocolbuffers/protobuf/commit/ed3c57114d8e2b47cca7697ddaa50c1b3762a6b0">https://github.com/protocolbuffers/protobuf/commit/ed3c57114d8e2b47cca7697ddaa50c1b3762a6b0</a>)</li>
<li>Fix a bug with custom features outside of the <code>pb</code>
package. (<a
href="https://github.com/protocolbuffers/protobuf/commit/872d3ce7a4da00d7dcec33ced20cfe45235935e8">https://github.com/protocolbuffers/protobuf/commit/872d3ce7a4da00d7dcec33ced20cfe45235935e8</a>)</li>
<li>Fix import option handling when include_imports isn't set. (<a
href="https://github.com/protocolbuffers/protobuf/commit/9ef9e80afd9bc8379d578fe67e5ab0738728c04e">https://github.com/protocolbuffers/protobuf/commit/9ef9e80afd9bc8379d578fe67e5ab0738728c04e</a>)</li>
<li>Fix a bug in STRICT check of namespaced enums to properly check for
'reserved 1 to max' (<a
href="https://github.com/protocolbuffers/protobuf/commit/1229d4adba24c0952ab85ce96bc7b7f8a1fe6d0f">https://github.com/protocolbuffers/protobuf/commit/1229d4adba24c0952ab85ce96bc7b7f8a1fe6d0f</a>)</li>
<li>Prevent accidental stripping of <code>debug_redact</code> options
via import option. (<a
href="https://github.com/protocolbuffers/protobuf/commit/f58b098bffa7ca4045ef7773b09151a6af5d0c28">https://github.com/protocolbuffers/protobuf/commit/f58b098bffa7ca4045ef7773b09151a6af5d0c28</a>)</li>
</ul>
<h1>C++</h1>
<ul>
<li>Add EnumerateEnumValues function. (<a
href="https://github.com/protocolbuffers/protobuf/commit/397d5d99db274b379d1384814074bf7df39d32f7">https://github.com/protocolbuffers/protobuf/commit/397d5d99db274b379d1384814074bf7df39d32f7</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/protocolbuffers/protobuf/commits">compare
view</a></li>
</ul>
</details>
<br />

Updates `cryptography` from 46.0.3 to 46.0.4
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst">cryptography's
changelog</a>.</em></p>
<blockquote>
<p>46.0.4 - 2026-01-27</p>
<pre><code>
* `Dropped support for win_arm64 wheels`_.
* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL
3.5.5.
<p>.. _v46-0-3:<br />
</code></pre></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pyca/cryptography/commit/e6f44fc8e6391f05d719fb9d369692325b87a471"><code>e6f44fc</code></a>
bump for 46.0.4 and drop win arm64 due to CI issues (<a
href="https://redirect.github.com/pyca/cryptography/issues/14217">#14217</a>)</li>
<li>See full diff in <a
href="https://github.com/pyca/cryptography/compare/46.0.3...46.0.4">compare
view</a></li>
</ul>
</details>
<br />

Updates `grpcio-tools` from 1.74.0 to 1.76.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/grpc/grpc/releases">grpcio-tools's
releases</a>.</em></p>
<blockquote>
<h2>Release v1.76.0</h2>
<p>This is release 1.76.0 (<a
href="https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md">genuine</a>)
of gRPC Core.</p>
<p>For gRPC documentation, see <a href="https://grpc.io/">grpc.io</a>.
For previous releases, see <a
href="https://github.com/grpc/grpc/releases">Releases</a>.</p>
<p>This release contains refinements, improvements, and bug fixes, with
highlights listed below.</p>
<h2>Core</h2>
<ul>
<li>Prioritize system CA over bundled CA. (<a
href="https://redirect.github.com/grpc/grpc/pull/40583">#40583</a>)</li>
<li>[event_engine] Introduce a event_engine_poller_for_python
experiment. (<a
href="https://redirect.github.com/grpc/grpc/pull/40243">#40243</a>)</li>
<li>[metrics] add grpc.lb.backend_service label. (<a
href="https://redirect.github.com/grpc/grpc/pull/40486">#40486</a>)</li>
</ul>
<h2>C#</h2>
<ul>
<li>[csharp tools] <a
href="https://redirect.github.com/grpc/grpc/issues/39374">#39374</a>
Grpc.Tools can't process file Suffix name with Upper character. (<a
href="https://redirect.github.com/grpc/grpc/pull/40072">#40072</a>)</li>
</ul>
<h2>Python</h2>
<ul>
<li>[Python] gRPC AsyncIO: Improve CompletionQueue polling performance.
(<a
href="https://redirect.github.com/grpc/grpc/pull/39993">#39993</a>)</li>
</ul>
<h2>Release v1.76.0-pre1</h2>
<p>This is a prerelease of gRPC Core 1.76.0 (genuine).</p>
<p>For gRPC documentation, see <a href="https://grpc.io/">grpc.io</a>.
For previous releases, see <a
href="https://github.com/grpc/grpc/releases">Releases</a>.</p>
<p>This prerelease contains refinements, improvements, and bug
fixes.</p>
<h2>Release v1.75.1</h2>
<p>This is release gRPC Core 1.75.1 (gemini).</p>
<p>For gRPC documentation, see <a href="https://grpc.io/">grpc.io</a>.
For previous releases, see <a
href="https://github.com/grpc/grpc/releases">Releases</a>.</p>
<p>This release contains refinements, improvements, and bug fixes.</p>
<h2>What's Changed</h2>
<h3>Python</h3>
<ul>
<li>Release grpcio wheels with Python 3.14 support (<a
href="https://redirect.github.com/grpc/grpc/issues/40403">#40403</a>)</li>
<li>Asyncio: fixes grpc shutdown race condition occurring during python
interpreter finalizations. (<a
href="https://redirect.github.com/grpc/grpc/issues/40447">#40447</a>)
<ul>
<li>This also addresses previously reported issues with empty error
message on Python interpreter exit (<code>Error in
sys.excepthook:</code>/<code>Original exception was:</code> empty): <a
href="https://redirect.github.com/grpc/grpc/issues/36655">#36655</a>, <a
href="https://redirect.github.com/grpc/grpc/issues/38679">#38679</a>, <a
href="https://redirect.github.com/grpc/grpc/issues/33342">#33342</a></li>
</ul>
</li>
<li>Python 3.14: preserve current behavior when using grpc.aio async
methods outside of a running event loop. (<a
href="https://redirect.github.com/grpc/grpc/issues/40750">#40750</a>)
<ul>
<li>Note: using async methods outside of a running event loop is <a
href="https://docs.python.org/3.14/library/asyncio-policy.html#asyncio-policies">discouraged</a>
by Python, and <strong>will be deprecated in future gRPC
releases</strong>. Please use the <a
href="https://docs.python.org/3.14/library/asyncio-runner.html#asyncio.run">asyncio.run()</a>
function (or <a
href="https://docs.python.org/3.14/library/asyncio-runner.html#asyncio.Runner">asyncio.Runner</a>
for custom loop factories). For interactive mode, use dedicated <a
href="https://docs.python.org/3/library/asyncio.html#asyncio-cli">asyncio
REPL</a>: <code>python -m asyncio</code>.</li>
</ul>
</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/grpc/grpc/compare/v1.75.0...v1.75.1">https://github.com/grpc/grpc/compare/v1.75.0...v1.75.1</a></p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/grpc/grpc/commit/f5ffb68d8a2fd603dff16287e90a4ac571e1fec6"><code>f5ffb68</code></a>
[Release] Bump version to 1.76.0 (on v1.76.x branch) (<a
href="https://redirect.github.com/grpc/grpc/issues/40925">#40925</a>)</li>
<li><a
href="https://github.com/grpc/grpc/commit/ffd83794b3804739c0789096155833e302ac1270"><code>ffd8379</code></a>
[Release] Bump version to 1.76.0-pre1 (on v1.76.x branch) (<a
href="https://redirect.github.com/grpc/grpc/issues/40798">#40798</a>)</li>
<li><a
href="https://github.com/grpc/grpc/commit/835d394034060002262ab4e404e552ac0393a1a1"><code>835d394</code></a>
[Release] Bump core version to 51.0.0 for upcoming release (<a
href="https://redirect.github.com/grpc/grpc/issues/40784">#40784</a>)</li>
<li><a
href="https://github.com/grpc/grpc/commit/de6ce7f32b1bf254d2b4c04e8872b63284632fd3"><code>de6ce7f</code></a>
[PH2] Add files for goaway support (<a
href="https://redirect.github.com/grpc/grpc/issues/40786">#40786</a>)</li>
<li><a
href="https://github.com/grpc/grpc/commit/f7dd7f4b4186049d104aa2c88ad4432f58c19ede"><code>f7dd7f4</code></a>
[PH2][Trivial][CleanUp]</li>
<li><a
href="https://github.com/grpc/grpc/commit/2d40a376c7ea72602fa7bc62606324b1ff14c44f"><code>2d40a37</code></a>
[PH2][ChannelZ][ZTrace][Skeleton]</li>
<li><a
href="https://github.com/grpc/grpc/commit/83acb278bef565d8d46d6e19582eaacc86f737a3"><code>83acb27</code></a>
[build] Add Missing Dependencies for reflection_proto in Preparation for
Enab...</li>
<li><a
href="https://github.com/grpc/grpc/commit/abfe8a29d31a8ab9ff6cdda11cdfa2813cb59632"><code>abfe8a2</code></a>
[PH2] Stream list represents streams open for reads.</li>
<li><a
href="https://github.com/grpc/grpc/commit/c65d8de800aaa907b45cee54ebcd29d5b556d3ca"><code>c65d8de</code></a>
[PH2][Expt] Fix the experiment expiry</li>
<li><a
href="https://github.com/grpc/grpc/commit/755d025f16d20641155e89ecc46777e94e9e172d"><code>755d025</code></a>
Fix latent_see_test flakiness</li>
<li>Additional commits viewable in <a
href="https://github.com/grpc/grpc/compare/v1.74.0...v1.76.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `grpcio-reflection` from 1.74.0 to 1.76.0

Updates `pyjwt` from 2.10.1 to 2.11.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/jpadilla/pyjwt/releases">pyjwt's
releases</a>.</em></p>
<blockquote>
<h2>2.11.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Fixed type error in comment by <a
href="https://github.com/shuhaib-aot"><code>@​shuhaib-aot</code></a> in
<a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1026">jpadilla/pyjwt#1026</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1018">jpadilla/pyjwt#1018</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1033">jpadilla/pyjwt#1033</a></li>
<li>Make note of use of leeway with nbf by <a
href="https://github.com/djw8605"><code>@​djw8605</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1034">jpadilla/pyjwt#1034</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1035">jpadilla/pyjwt#1035</a></li>
<li>Fixes <a
href="https://redirect.github.com/jpadilla/pyjwt/issues/964">#964</a>:
Validate key against allowed types for Algorithm family by <a
href="https://github.com/pachewise"><code>@​pachewise</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/985">jpadilla/pyjwt#985</a></li>
<li>Feat <a
href="https://redirect.github.com/jpadilla/pyjwt/issues/1024">#1024</a>:
Add iterator for PyJWKSet by <a
href="https://github.com/pachewise"><code>@​pachewise</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1041">jpadilla/pyjwt#1041</a></li>
<li>Fixes <a
href="https://redirect.github.com/jpadilla/pyjwt/issues/1039">#1039</a>:
Add iss, issuer type checks by <a
href="https://github.com/pachewise"><code>@​pachewise</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1040">jpadilla/pyjwt#1040</a></li>
<li>Fixes <a
href="https://redirect.github.com/jpadilla/pyjwt/issues/660">#660</a>:
Improve typing/logic for <code>options</code> in decode,
decode_complete; Improve docs by <a
href="https://github.com/pachewise"><code>@​pachewise</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1045">jpadilla/pyjwt#1045</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1042">jpadilla/pyjwt#1042</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1052">jpadilla/pyjwt#1052</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1053">jpadilla/pyjwt#1053</a></li>
<li>Fix <a
href="https://redirect.github.com/jpadilla/pyjwt/issues/1022">#1022</a>:
Map <code>algorithm=None</code> to &quot;none&quot; by <a
href="https://github.com/qqii"><code>@​qqii</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1056">jpadilla/pyjwt#1056</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1055">jpadilla/pyjwt#1055</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1058">jpadilla/pyjwt#1058</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1060">jpadilla/pyjwt#1060</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1061">jpadilla/pyjwt#1061</a></li>
<li>Fixes <a
href="https://redirect.github.com/jpadilla/pyjwt/issues/1047">#1047</a>:
Correct <code>PyJWKClient.get_signing_key_from_jwt</code> annotation by
<a href="https://github.com/khvn26"><code>@​khvn26</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1048">jpadilla/pyjwt#1048</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1062">jpadilla/pyjwt#1062</a></li>
<li>Fixed doc string typo in _validate_jti() function <a
href="https://redirect.github.com/jpadilla/pyjwt/issues/1063">#1063</a>
by <a
href="https://github.com/kuldeepkhatke"><code>@​kuldeepkhatke</code></a>
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1064">jpadilla/pyjwt#1064</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1065">jpadilla/pyjwt#1065</a></li>
<li>Update SECURITY.md by <a
href="https://github.com/auvipy"><code>@​auvipy</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1057">jpadilla/pyjwt#1057</a></li>
<li>Typing fix: use <code>float</code> instead of <code>int</code> for
<code>lifespan</code> and <code>timeout</code> by <a
href="https://github.com/nikitagashkov"><code>@​nikitagashkov</code></a>
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1068">jpadilla/pyjwt#1068</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1067">jpadilla/pyjwt#1067</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1071">jpadilla/pyjwt#1071</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1076">jpadilla/pyjwt#1076</a></li>
<li>Fix TYP header documentation by <a
href="https://github.com/fobiasmog"><code>@​fobiasmog</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1046">jpadilla/pyjwt#1046</a></li>
<li>doc: Document claims sub and jti by <a
href="https://github.com/cleder"><code>@​cleder</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1088">jpadilla/pyjwt#1088</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1077">jpadilla/pyjwt#1077</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/jpadilla/pyjwt/pull/1089">jpadilla/pyjwt#1089</a></li>
<li>Bump actions/stale from 8 to 10 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1090">jpadilla/pyjwt#1090</a></li>
<li>Bump actions/checkout from 4 to 5 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1083">jpadilla/pyjwt#1083</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1091">jpadilla/pyjwt#1091</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1093">jpadilla/pyjwt#1093</a></li>
<li>[pre-commit.ci] pre-commit autoupdate by <a
href="https://github.com/pre-commit-ci"><code>@​pre-commit-ci</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1096">jpadilla/pyjwt#1096</a></li>
<li>Resolve package build warnings by <a
href="https://github.com/kurtmckee"><code>@​kurtmckee</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1105">jpadilla/pyjwt#1105</a></li>
<li>Support Python 3.14, and test against PyPy 3.10+ by <a
href="https://github.com/kurtmckee"><code>@​kurtmckee</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1104">jpadilla/pyjwt#1104</a></li>
<li>Fix a <code>SyntaxWarning</code> caused by invalid escape sequences
by <a href="https://github.com/kurtmckee"><code>@​kurtmckee</code></a>
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1103">jpadilla/pyjwt#1103</a></li>
<li>Standardize CHANGELOG links to PRs by <a
href="https://github.com/kurtmckee"><code>@​kurtmckee</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1110">jpadilla/pyjwt#1110</a></li>
<li>Migrate from <code>pep517</code>, which is deprecated, to
<code>build</code> by <a
href="https://github.com/kurtmckee"><code>@​kurtmckee</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1108">jpadilla/pyjwt#1108</a></li>
<li>Fix incorrectly-named test suite function by <a
href="https://github.com/kurtmckee"><code>@​kurtmckee</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1116">jpadilla/pyjwt#1116</a></li>
<li>Fix Read the Docs builds by <a
href="https://github.com/kurtmckee"><code>@​kurtmckee</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1111">jpadilla/pyjwt#1111</a></li>
<li>Bump actions/download-artifact from 4 to 6 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1118">jpadilla/pyjwt#1118</a></li>
<li>Escalate test suite warnings to errors by <a
href="https://github.com/kurtmckee"><code>@​kurtmckee</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1107">jpadilla/pyjwt#1107</a></li>
<li>Add pyupgrade as a pre-commit hook by <a
href="https://github.com/kurtmckee"><code>@​kurtmckee</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1109">jpadilla/pyjwt#1109</a></li>
<li>Simplify the test suite decorators by <a
href="https://github.com/kurtmckee"><code>@​kurtmckee</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1113">jpadilla/pyjwt#1113</a></li>
<li>Improve coverage config and eliminate unused test suite code by <a
href="https://github.com/kurtmckee"><code>@​kurtmckee</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1115">jpadilla/pyjwt#1115</a></li>
<li>Build a shared wheel once in the test suite by <a
href="https://github.com/kurtmckee"><code>@​kurtmckee</code></a> in <a
href="https://redirect.github.com/jpadilla/pyjwt/pull/1114">jpadilla/pyjwt#1114</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/jpadilla/pyjwt/blob/master/CHANGELOG.rst">pyjwt's
changelog</a>.</em></p>
<blockquote>
<h2><code>v2.11.0
&lt;https://github.com/jpadilla/pyjwt/compare/2.10.1...2.11.0&gt;</code>__</h2>
<p>Fixed</p>
<pre><code>
- Enforce ECDSA curve validation per RFC 7518 Section 3.4.
- Fix build system warnings by @kurtmckee in
`[#1105](https://github.com/jpadilla/pyjwt/issues/1105)
&lt;https://github.com/jpadilla/pyjwt/pull/1105&gt;`__
- Validate key against allowed types for Algorithm family in
`[#964](https://github.com/jpadilla/pyjwt/issues/964)
&lt;https://github.com/jpadilla/pyjwt/pull/964&gt;`__
- Add iterator for JWKSet in
`[#1041](https://github.com/jpadilla/pyjwt/issues/1041)
&lt;https://github.com/jpadilla/pyjwt/pull/1041&gt;`__
- Validate `iss` claim is a string during encoding and decoding by
@pachewise in `[#1040](https://github.com/jpadilla/pyjwt/issues/1040)
&lt;https://github.com/jpadilla/pyjwt/pull/1040&gt;`__
- Improve typing/logic for `options` in decode, decode_complete by
@pachewise in `[#1045](https://github.com/jpadilla/pyjwt/issues/1045)
&lt;https://github.com/jpadilla/pyjwt/pull/1045&gt;`__
- Declare float supported type for lifespan and timeout by
@nikitagashkov in
`[#1068](https://github.com/jpadilla/pyjwt/issues/1068)
&lt;https://github.com/jpadilla/pyjwt/pull/1068&gt;`__
- Fix ``SyntaxWarning``\s/``DeprecationWarning``\s caused by invalid
escape sequences by @kurtmckee in
`[#1103](https://github.com/jpadilla/pyjwt/issues/1103)
&lt;https://github.com/jpadilla/pyjwt/pull/1103&gt;`__
- Development: Build a shared wheel once to speed up test suite setup
times by @kurtmckee in
`[#1114](https://github.com/jpadilla/pyjwt/issues/1114)
&lt;https://github.com/jpadilla/pyjwt/pull/1114&gt;`__
- Development: Test type annotations across all supported Python
versions,
increase the strictness of the type checking, and remove the mypy
pre-commit hook
by @kurtmckee in `[#1112](https://github.com/jpadilla/pyjwt/issues/1112)
&lt;https://github.com/jpadilla/pyjwt/pull/1112&gt;`__
<p>Added
</code></pre></p>
<ul>
<li>Support Python 3.14, and test against PyPy 3.10 and 3.11 by <a
href="https://github.com/kurtmckee"><code>@​kurtmckee</code></a> in
<code>[#1104](https://github.com/jpadilla/pyjwt/issues/1104)
&lt;https://github.com/jpadilla/pyjwt/pull/1104&gt;</code>__</li>
<li>Development: Migrate to <code>build</code> to test package building
in CI by <a
href="https://github.com/kurtmckee"><code>@​kurtmckee</code></a> in
<code>[#1108](https://github.com/jpadilla/pyjwt/issues/1108)
&lt;https://github.com/jpadilla/pyjwt/pull/1108&gt;</code>__</li>
<li>Development: Improve coverage config and eliminate unused test suite
code by <a
href="https://github.com/kurtmckee"><code>@​kurtmckee</code></a> in
<code>[#1115](https://github.com/jpadilla/pyjwt/issues/1115)
&lt;https://github.com/jpadilla/pyjwt/pull/1115&gt;</code>__</li>
<li>Docs: Standardize CHANGELOG links to PRs by <a
href="https://github.com/kurtmckee"><code>@​kurtmckee</code></a> in
<code>[#1110](https://github.com/jpadilla/pyjwt/issues/1110)
&lt;https://github.com/jpadilla/pyjwt/pull/1110&gt;</code>__</li>
<li>Docs: Fix Read the Docs builds by <a
href="https://github.com/kurtmckee"><code>@​kurtmckee</code></a> in
<code>[#1111](https://github.com/jpadilla/pyjwt/issues/1111)
&lt;https://github.com/jpadilla/pyjwt/pull/1111&gt;</code>__</li>
<li>Docs: Add example of using leeway with nbf by <a
href="https://github.com/djw8605"><code>@​djw8605</code></a> in
<code>[#1034](https://github.com/jpadilla/pyjwt/issues/1034)
&lt;https://github.com/jpadilla/pyjwt/pull/1034&gt;</code>__</li>
<li>Docs: Refactored docs with <code>autodoc</code>; added
<code>PyJWS</code> and <code>jwt.algorithms</code> docs by <a
href="https://github.com/pachewise"><code>@​pachewise</code></a> in
<code>[#1045](https://github.com/jpadilla/pyjwt/issues/1045)
&lt;https://github.com/jpadilla/pyjwt/pull/1045&gt;</code>__</li>
<li>Docs: Documentation improvements for &quot;sub&quot; and
&quot;jti&quot; claims by <a
href="https://github.com/cleder"><code>@​cleder</code></a> in
<code>[#1088](https://github.com/jpadilla/pyjwt/issues/1088)
&lt;https://github.com/jpadilla/pyjwt/pull/1088&gt;</code>__</li>
<li>Development: Add pyupgrade as a pre-commit hook by <a
href="https://github.com/kurtmckee"><code>@​kurtmckee</code></a> in
<code>[#1109](https://github.com/jpadilla/pyjwt/issues/1109)
&lt;https://github.com/jpadilla/pyjwt/pull/1109&gt;</code>__</li>
<li>Add minimum key length validation for HMAC and RSA keys (CWE-326).
Warns by default via <code>InsecureKeyLengthWarning</code> when keys are
below
minimum recommended lengths per RFC 7518 Section 3.2 (HMAC) and
NIST SP 800-131A (RSA). Pass
<code>enforce_minimum_key_length=True</code> in
options to <code>PyJWT</code> or <code>PyJWS</code> to raise
<code>InvalidKeyError</code> instead.</li>
<li>Refactor <code>PyJWT</code> to own an internal <code>PyJWS</code>
instance instead of
calling global <code>api_jws</code> functions.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/jpadilla/pyjwt/commit/697344d25990641b8b2aa85f0a60634b590b5702"><code>697344d</code></a>
bump up version</li>
<li><a
href="https://github.com/jpadilla/pyjwt/commit/e4d0aec0248ef30cfc91bbcf0f011b0a318864c9"><code>e4d0aec</code></a>
fix: pre-commit</li>
<li><a
href="https://github.com/jpadilla/pyjwt/commit/df9a6a0c44906ff5f48676a65f522f21e31fcc0d"><code>df9a6a0</code></a>
fix: failing test</li>
<li><a
href="https://github.com/jpadilla/pyjwt/commit/2b2e53cd2377d09b082831c9406689c6cfe1ae80"><code>2b2e53c</code></a>
fix: docs</li>
<li><a
href="https://github.com/jpadilla/pyjwt/commit/635c8d89dd8b8bea1813fe8830a26d0274a4e724"><code>635c8d8</code></a>
fix: failing mypy</li>
<li><a
href="https://github.com/jpadilla/pyjwt/commit/96ae3563b9db8f5e18621c4d612f622cf476c92b"><code>96ae356</code></a>
feat: add minimum key length validation for HMAC and RSA</li>
<li><a
href="https://github.com/jpadilla/pyjwt/commit/5b8622773358e56d3d3c0a9acf404809ff34433a"><code>5b86227</code></a>
fix: enforce ECDSA curve validation per RFC 7518 Section 3.4</li>
<li><a
href="https://github.com/jpadilla/pyjwt/commit/04947d75dc45ba1a4a66eaa2b24fbb0eb512ceab"><code>04947d7</code></a>
Bump actions/download-artifact from 6 to 7 (<a
href="https://redirect.github.com/jpadilla/pyjwt/issues/1125">#1125</a>)</li>
<li><a
href="https://github.com/jpadilla/pyjwt/commit/dd448344c3eb7bc54b7b395e0f6b00bb811be24a"><code>dd44834</code></a>
Fix leeway value in usage documentation (<a
href="https://redirect.github.com/jpadilla/pyjwt/issues/1124">#1124</a>)</li>
<li><a
href="https://github.com/jpadilla/pyjwt/commit/407f0bde99383fd9c63f1ed4ef922322ab72b5a1"><code>407f0bd</code></a>
Thoroughly test type annotations, and resolve errors (<a
href="https://redirect.github.com/jpadilla/pyjwt/issues/1112">#1112</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/jpadilla/pyjwt/compare/2.10.1...2.11.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `ruff` from 0.14.13 to 0.14.14
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/ruff/releases">ruff's
releases</a>.</em></p>
<blockquote>
<h2>0.14.14</h2>
<h2>Release Notes</h2>
<p>Released on 2026-01-22.</p>
<h3>Preview features</h3>
<ul>
<li>Preserve required parentheses in lambda bodies (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22747">#22747</a>)</li>
<li>Combine range suppression code diagnostics (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22613">#22613</a>)</li>
<li>[<code>airflow</code>] Second positional argument to
<code>Asset</code>/<code>Dataset</code> should not be a dictionary
(<code>AIR303</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22453">#22453</a>)</li>
<li>[<code>ruff</code>] Detect duplicate entries in <code>__all__</code>
(<code>RUF068</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22114">#22114</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>[<code>pyupgrade</code>] Allow shadowing non-builtin bindings
(<code>UP029</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22749">#22749</a>)</li>
<li>[<code>pyupgrade</code>] Apply <code>UP045</code> to string
arguments of <code>typing.cast</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22320">#22320</a>)</li>
<li>[<code>flake8-pie</code>] Detect duplicated declared class fields in
<code>PIE794</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22717">#22717</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>[<code>flake8-pyi</code>] Fix inconsistent handling of forward
references for <code>__new__</code>, <code>__enter__</code>,
<code>__aenter__</code> in <code>PYI034</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22798">#22798</a>)</li>
<li>[<code>flake8-pytest-style</code>] Support <code>check</code>
parameter in <code>PT011</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22725">#22725</a>)</li>
<li>[<code>ruff</code>] Add exception for
<code>ctypes.Structure._fields_</code> (<code>RUF012</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22559">#22559</a>)</li>
<li>Many fixes are now marked unsafe if they would remove comments:
<ul>
<li>[<code>flake8-bugbear</code>] <a
href="https://redirect.github.com/astral-sh/ruff/pull/22656"><code>B009</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22657"><code>B010</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22658"><code>B013</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22659"><code>B014</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22632"><code>B033</code></a></li>
<li>[<code>flake8-simplify</code>] <a
href="https://redirect.github.com/astral-sh/ruff/pull/22662"><code>SIM910</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22661"><code>SIM911</code></a></li>
<li>[<code>pyupgrade</code>] <a
href="https://redirect.github.com/astral-sh/ruff/pull/22772"><code>UP007</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22774"><code>UP039</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22773"><code>UP041</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22772"><code>UP045</code></a></li>
<li>[<code>refurb</code>] <a
href="https://redirect.github.com/astral-sh/ruff/pull/22767"><code>FURB105</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22681"><code>FURB116</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22680"><code>FURB136</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22679"><code>FURB140</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22670"><code>FURB145</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22669"><code>FURB154</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22668"><code>FURB157</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22667"><code>FURB164</code></a>,<a
href="https://redirect.github.com/astral-sh/ruff/pull/22666"><code>FURB181</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22665"><code>FURB188</code></a></li>
<li>[<code>ruff</code>] <a
href="https://redirect.github.com/astral-sh/ruff/pull/22663"><code>RUF019</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22664"><code>RUF020</code></a></li>
</ul>
</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Add <code>--exit-non-zero-on-format</code> to formatter exit codes
section (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22761">#22761</a>)</li>
<li>Update contributing guide for adding a new rule (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22779">#22779</a>)</li>
<li>[<code>FastAPI</code>] Document fix safety for <code>FAST001</code>
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/22655">#22655</a>)</li>
<li>[<code>flake8-async</code>] Tweak explanation to focus on
latency/efficiency tradeoff (<code>ASYNC110</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22715">#22715</a>)</li>
<li>[<code>pandas-vet</code>] Make example error out-of-the-box
(<code>PD002</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22561">#22561</a>)</li>
<li>[<code>refurb</code>] Make the example work out of box
(<code>FURB101</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22770">#22770</a>)</li>
<li>[<code>refurb</code>] Make the example work out of box
(<code>FURB103</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22769">#22769</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a
href="https://github.com/alejsdev"><code>@​alejsdev</code></a></li>
<li><a href="https://github.com/ntBre"><code>@​ntBre</code></a></li>
<li><a
href="https://github.com/caiquejjx"><code>@​caiquejjx</code></a></li>
<li><a
href="https://github.com/chirizxc"><code>@​chirizxc</code></a></li>
<li><a
href="https://github.com/denyszhak"><code>@​denyszhak</code></a></li>
<li><a
href="https://github.com/sjyangkevin"><code>@​sjyangkevin</code></a></li>
<li><a
href="https://github.com/MeGaGiGaGon"><code>@​MeGaGiGaGon</code></a></li>
<li><a
href="https://github.com/leandrobbraga"><code>@​leandrobbraga</code></a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md">ruff's
changelog</a>.</em></p>
<blockquote>
<h2>0.14.14</h2>
<p>Released on 2026-01-22.</p>
<h3>Preview features</h3>
<ul>
<li>Preserve required parentheses in lambda bodies (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22747">#22747</a>)</li>
<li>Combine range suppression code diagnostics (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22613">#22613</a>)</li>
<li>[<code>airflow</code>] Second positional argument to
<code>Asset</code>/<code>Dataset</code> should not be a dictionary
(<code>AIR303</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22453">#22453</a>)</li>
<li>[<code>ruff</code>] Detect duplicate entries in <code>__all__</code>
(<code>RUF068</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22114">#22114</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>[<code>pyupgrade</code>] Allow shadowing non-builtin bindings
(<code>UP029</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22749">#22749</a>)</li>
<li>[<code>pyupgrade</code>] Apply <code>UP045</code> to string
arguments of <code>typing.cast</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22320">#22320</a>)</li>
<li>[<code>flake8-pie</code>] Detect duplicated declared class fields in
<code>PIE794</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22717">#22717</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>[<code>flake8-pyi</code>] Fix inconsistent handling of forward
references for <code>__new__</code>, <code>__enter__</code>,
<code>__aenter__</code> in <code>PYI034</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22798">#22798</a>)</li>
<li>[<code>flake8-pytest-style</code>] Support <code>check</code>
parameter in <code>PT011</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22725">#22725</a>)</li>
<li>[<code>ruff</code>] Add exception for
<code>ctypes.Structure._fields_</code> (<code>RUF012</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22559">#22559</a>)</li>
<li>Many fixes are now marked unsafe if they would remove comments:
<ul>
<li>[<code>flake8-bugbear</code>] <a
href="https://redirect.github.com/astral-sh/ruff/pull/22656"><code>B009</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22657"><code>B010</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22658"><code>B013</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22659"><code>B014</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22632"><code>B033</code></a></li>
<li>[<code>flake8-simplify</code>] <a
href="https://redirect.github.com/astral-sh/ruff/pull/22662"><code>SIM910</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22661"><code>SIM911</code></a></li>
<li>[<code>pyupgrade</code>] <a
href="https://redirect.github.com/astral-sh/ruff/pull/22772"><code>UP007</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22774"><code>UP039</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22773"><code>UP041</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22772"><code>UP045</code></a></li>
<li>[<code>refurb</code>] <a
href="https://redirect.github.com/astral-sh/ruff/pull/22767"><code>FURB105</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22681"><code>FURB116</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22680"><code>FURB136</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22679"><code>FURB140</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22670"><code>FURB145</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22669"><code>FURB154</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22668"><code>FURB157</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22667"><code>FURB164</code></a>,<a
href="https://redirect.github.com/astral-sh/ruff/pull/22666"><code>FURB181</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22665"><code>FURB188</code></a></li>
<li>[<code>ruff</code>] <a
href="https://redirect.github.com/astral-sh/ruff/pull/22663"><code>RUF019</code></a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/22664"><code>RUF020</code></a></li>
</ul>
</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Add <code>--exit-non-zero-on-format</code> to formatter exit codes
section (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22761">#22761</a>)</li>
<li>Update contributing guide for adding a new rule (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22779">#22779</a>)</li>
<li>[<code>FastAPI</code>] Document fix safety for <code>FAST001</code>
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/22655">#22655</a>)</li>
<li>[<code>flake8-async</code>] Tweak explanation to focus on
latency/efficiency tradeoff (<code>ASYNC110</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22715">#22715</a>)</li>
<li>[<code>pandas-vet</code>] Make example error out-of-the-box
(<code>PD002</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22561">#22561</a>)</li>
<li>[<code>refurb</code>] Make the example work out of box
(<code>FURB101</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22770">#22770</a>)</li>
<li>[<code>refurb</code>] Make the example work out of box
(<code>FURB103</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22769">#22769</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a
href="https://github.com/alejsdev"><code>@​alejsdev</code></a></li>
<li><a href="https://github.com/ntBre"><code>@​ntBre</code></a></li>
<li><a
href="https://github.com/caiquejjx"><code>@​caiquejjx</code></a></li>
<li><a
href="https://github.com/chirizxc"><code>@​chirizxc</code></a></li>
<li><a
href="https://github.com/denyszhak"><code>@​denyszhak</code></a></li>
<li><a
href="https://github.com/sjyangkevin"><code>@​sjyangkevin</code></a></li>
<li><a
href="https://github.com/MeGaGiGaGon"><code>@​MeGaGiGaGon</code></a></li>
<li><a
href="https://github.com/leandrobbraga"><code>@​leandrobbraga</code></a></li>
<li><a
href="https://github.com/MichaReiser"><code>@​MichaReiser</code></a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/astral-sh/ruff/commit/8b2e7b36f246b990fe473a84eef25ff429e59ecf"><code>8b2e7b3</code></a>
Prepare release v0.14.14 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/22813">#22813</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/4c7d1f50fd8d1baf06a3c8885ecd0ded0113d383"><code>4c7d1f5</code></a>
[ty] Infer <code>TypedDict</code> types with &gt;=1 required key as
being always truthy (<a
href="https://redirect.github.com/astral-sh/ruff/issues/2">#2</a>...</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/b7de4341535ff2b299695335e0a7b9ebaf297348"><code>b7de434</code></a>
add CCfW hooks (<a
href="https://redirect.github.com/astral-sh/ruff/issues/22803">#22803</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/b912dfc8788f8f8c351767899df6b72ce3366352"><code>b912dfc</code></a>
[<code>pyupgrade</code>] Apply <code>UP045</code> to string arguments of
<code>typing.cast</code> (<a
href="https://redirect.github.com/astral-sh/ruff/issues/22320">#22320</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/1ff062d1cccb8025de184a55c6dfe469a4293249"><code>1ff062d</code></a>
[ty] Improve completion rankings for raise-from/except contexts (<a
href="https://redirect.github.com/astral-sh/ruff/issues/22775">#22775</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/7e408a51d24db2bca248bb90f2f7938f83efd22b"><code>7e408a5</code></a>
Update dependency wrangler to v4.59.1 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/22793">#22793</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/ceb876b82300bd237d11e3eb77c46fcf3d3afe85"><code>ceb876b</code></a>
[<code>flake8-pyi</code>] Fix inconsistent handling of forward
references for <code>__new__</code>,...</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/c5b4ee68c90faf0e609fa6553a171a7ba60ebdcb"><code>c5b4ee6</code></a>
[ty] Support solving generics involving PEP 695 type aliases (<a
href="https://redirect.github.com/astral-sh/ruff/issues/22678">#22678</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/b9a61293153f43df9963c727539309b76ac4756d"><code>b9a6129</code></a>
[ty] Improve support for kwarg splats in dictionary literals (<a
href="https://redirect.github.com/astral-sh/ruff/issues/22781">#22781</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/f516d47ceb7f6a0c3a95eaaa2c7451a32b5d7120"><code>f516d47</code></a>
Update contributing guide for adding a new rule (<a
href="https://redirect.github.com/astral-sh/ruff/issues/22779">#22779</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/ruff/compare/0.14.13...0.14.14">compare
view</a></li>
</ul>
</details>
<br />


Dependabot 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`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ivan Shymko <ishymko@google.com>
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.

[Bug]: DefaultRequestHandlerV2 ActiveTask producer can remain pending during EventQueue subscriber cleanup

2 participants