Refresh the locked runtime dependencies - #3317
Closed
maxisbey wants to merge 1 commit into
Closed
Conversation
uv.lock had not moved for most runtime dependencies since mid-2025, so the `locked` CI leg was certifying anyio 4.10 / starlette 0.49 / uvicorn 0.35 / pyjwt 2.10 while a fresh install of the SDK gets releases a year newer. Re-resolve the runtime closure of mcp[cli,rich] (the same set the dependency canary floats) to current versions; test and docs tooling are left where they were for Dependabot to move. Every bumped version is at least two weeks old. Newer stubs need three typing adjustments, none of which change behaviour: anyio 4.12+ types `TaskGroup.start_soon` as taking a coroutine function (which it always required at runtime), so `_spawn` and `_contained_notify` say so; Starlette 0.52 made `Request` generic over its state type, so the one test that reads request attributes pins the parameter; and `start_soon` now returns a handle, so a test callback that must return None wraps it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #3316 (uses its uv pin); the diff against that branch is
uv.lockplus three typing adjustments.Motivation and Context
uv.lockhas not moved for most runtime dependencies since mid-2025 (anyio 4.10.0, starlette 0.49.1, uvicorn 0.35.0, sse-starlette 3.0.2, pyjwt 2.10.1, typer 0.17.4, ...), because the bump PRs since then were closed rather than merged. ThelockedCI leg therefore certifies a dependency set roughly a year older than whatpip install mcpresolves today, and the new dependency canary's "differences from uv.lock" table starts life 30 rows long.This re-resolves the runtime closure of
mcp[cli,rich]— the same 39 packages the canary floats — to current versions and leaves test/docs tooling (pytest, ruff, pyright, coverage, inline-snapshot, zensical, ...) exactly where it was, so the diff carries no lint or snapshot churn; Dependabot keeps owning those. Every bumped version was published at least 14 days ago, matching the Dependabot cooldown. Notable moves: anyio 4.10.0 → 4.14.2, starlette 0.49.1 → 1.3.1, uvicorn 0.35.0 → 0.52.0, sse-starlette 3.0.2 → 3.4.6, pydantic 2.12.5 → 2.13.4, pyjwt 2.10.1 → 2.13.0, cryptography 46 → 50, typer 0.17.4 → 0.27.0, rich 14 → 15, httpx2 2.5.0 → 2.9.1.logfire/opentelemetry-sdk(dev) move too becauseopentelemetry-apidrags them.Three typing adjustments come with the newer stubs; none changes behaviour:
TaskGroup.start_soonas taking a coroutine function (it always required one at runtime), soJSONRPCDispatcher._spawnand_contained_notifyare annotated withCoroutine[...]instead ofAwaitable[...].OnNotifyitself is untouched.Requestgeneric over its state type; the one test that reads request attributes offServerRequestContext.requestpins the parameter so strict pyright stays happy.start_soonnow returns a task handle, so a stdio test callback typed() -> Nonewraps the call.How Has This Been Tested?
./scripts/test(full suite, 100% coverage,strict-no-cover) andpyrightpass locally on 3.14 against the refreshed lock; CI covers the rest of the matrix. Also drove a real stdio and streamable-HTTP client/server round trip (initialize, list/call tool, progress + log notifications, a validation-error call) and themcpCLI against the new versions by hand.Breaking Changes
None. Only the lockfile and annotations change; the published dependency specifiers are untouched.
Types of changes
(Maintenance: lockfile refresh.)
Checklist
Additional context
If you would rather take the whole tree forward (tooling included) that is a one-line
uv lock --upgradeon top, but it pulls in ruff 0.16 / pyright 1.1.411 / inline-snapshot 0.35 and whatever they flag, so it seemed better reviewed separately.AI Disclaimer