Sydney Runkle and GitHub
3330ccdea4
release(langgraph): 1.1 ( #7102 )
...
exciting!
relnotes preview:
# LangGraph 1.1.0 Release Notes
## Type-Safe Streaming & Invoke
LangGraph 1.1 introduces `version="v2"` — a new opt-in streaming format
that brings full type safety to `stream()`, `astream()`, `invoke()`, and
`ainvoke()`.
### What's changing
**v1 (default, unchanged):** `stream()` yields bare tuples like
`(stream_mode, data)` or just `data`. `invoke()` returns a plain `dict`.
Interrupts are mixed into the output dict under `"__interrupt__"`.
**v2 (opt-in):** `stream()` yields strongly-typed `StreamPart` dicts
with `type`, `ns`, `data`, and (for values) `interrupts` fields.
`invoke()` returns a `GraphOutput` object with `.value` and
`.interrupts` attributes. When your state schema is a Pydantic model or
dataclass, outputs are automatically coerced to the correct type.
### `invoke()` / `ainvoke()` with `version="v2"`
```python
from langgraph.types import GraphOutput
result = graph.invoke({"input": "hello"}, version="v2")
# result is a GraphOutput, not a dict
assert isinstance(result, GraphOutput)
result.value # your output — dict, Pydantic model, or dataclass
result.interrupts # tuple[Interrupt, ...], empty if none occurred
```
With a non-`"values"` stream mode, `invoke(..., stream_mode="updates",
version="v2")` returns `list[StreamPart]` instead of `list[tuple]`.
### `stream()` / `astream()` with `version="v2"`
```python
for part in graph.stream({"input": "hello"}, version="v2"):
if part["type"] == "values":
part["data"] # OutputT — full state
part["interrupts"] # tuple[Interrupt, ...]
elif part["type"] == "updates":
part["data"] # dict[str, Any]
elif part["type"] == "messages":
part["data"] # tuple[BaseMessage, dict]
elif part["type"] == "custom":
part["data"] # Any
elif part["type"] == "tasks":
part["data"] # TaskPayload | TaskResultPayload
elif part["type"] == "debug":
part["data"] # DebugPayload
```
Each stream mode has its own `TypedDict` — `ValuesStreamPart`,
`UpdatesStreamPart`, `MessagesStreamPart`, `CustomStreamPart`,
`CheckpointStreamPart`, `TasksStreamPart`, `DebugStreamPart` — all
importable from `langgraph.types`. The union type `StreamPart` is a
discriminated union on `part["type"]`, enabling full type narrowing in
editors and type checkers.
### Pydantic & dataclass output coercion
When your graph's state schema is a Pydantic model or dataclass,
`version="v2"` automatically coerces outputs to the declared type:
```python
from pydantic import BaseModel
class MyState(BaseModel):
answer: str
count: int
graph = StateGraph(MyState)
# ... build graph ...
compiled = graph.compile()
result = compiled.invoke({"answer": "", "count": 0}, version="v2")
assert isinstance(result.value, MyState) # not a dict!
```
### Backward compatibility
- **Default is still `version="v1"`** — existing code works without
changes.
- To make migration easier, `GraphOutput` supports old-style best-effort
access to graph values and interrupts. Dict-style access
(`result["key"]`, `"key" in result`, `result["__interrupt__"]`) still
works and delegates to `result.value` / `result.interrupts` under the
hood. However, this is **deprecated** and emits a
`LangGraphDeprecatedSinceV11` warning. It will be removed in v3.0 —
migrate to `result.value` and `result.interrupts` at your convenience.
```python
result = graph.invoke({"input": "hello"}, version="v2")
# Old style — still works, but deprecated
result["input"] # delegates to result.value["input"]
result["__interrupt__"] # delegates to result.interrupts
"input" in result # delegates to "input" in result.value
# New style — preferred
result.value["input"]
result.interrupts
```
## Migration Guide
1. **No action required** — `version="v1"` remains the default. All
existing code continues to work.
2. **Adopt v2 incrementally** — Add `version="v2"` to individual
`invoke()`/`stream()` calls to get typed outputs.
3. **Use typed imports** — Import `GraphOutput`, `StreamPart`, and
individual part types from `langgraph.types` for type-safe code.
1.1.0
2026-03-10 12:41:30 +00:00
27da1d35ef
chore(deps): bump the all-dependencies group across 1 directory with 3 updates ( #7072 )
...
Bumps the all-dependencies group with 3 updates in the /libs/sdk-py
directory: [ruff](https://github.com/astral-sh/ruff ),
[codespell](https://github.com/codespell-project/codespell ) and
[ty](https://github.com/astral-sh/ty ).
Updates `ruff` from 0.15.1 to 0.15.5
<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.15.5</h2>
<h2>Release Notes</h2>
<p>Released on 2026-03-05.</p>
<h3>Preview features</h3>
<ul>
<li>Discover Markdown files by default in preview mode (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23434 ">#23434</a>)</li>
<li>[<code>perflint</code>] Extend <code>PERF102</code> to
comprehensions and generators (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23473 ">#23473</a>)</li>
<li>[<code>refurb</code>] Fix <code>FURB101</code> and
<code>FURB103</code> false positives when I/O variable is used later (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23542 ">#23542</a>)</li>
<li>[<code>ruff</code>] Add fix for
<code>none-not-at-end-of-union</code> (<code>RUF036</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22829 ">#22829</a>)</li>
<li>[<code>ruff</code>] Fix false positive for <code>re.split</code>
with empty string pattern (<code>RUF055</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23634 ">#23634</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>[<code>fastapi</code>] Handle callable class dependencies with
<code>__call__</code> method (<code>FAST003</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23553 ">#23553</a>)</li>
<li>[<code>pydocstyle</code>] Fix numpy section ordering
(<code>D420</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23685 ">#23685</a>)</li>
<li>[<code>pyflakes</code>] Fix false positive for names shadowing
re-exports (<code>F811</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23356 ">#23356</a>)</li>
<li>[<code>pyupgrade</code>] Avoid inserting redundant <code>None</code>
elements in <code>UP045</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23459 ">#23459</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Document extension mapping for Markdown code formatting (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23574 ">#23574</a>)</li>
<li>Update default Python version examples (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23605 ">#23605</a>)</li>
</ul>
<h3>Other changes</h3>
<ul>
<li>Publish releases to Astral mirror (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23616 ">#23616</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a
href="https://github.com/amyreese "><code>@amyreese</code></a></li>
<li><a
href="https://github.com/stakeswky "><code>@stakeswky</code></a></li>
<li><a
href="https://github.com/chirizxc "><code>@chirizxc</code></a></li>
<li><a
href="https://github.com/anishgirianish "><code>@anishgirianish</code></a></li>
<li><a href="https://github.com/bxff "><code>@bxff</code></a></li>
<li><a href="https://github.com/zsol "><code>@zsol</code></a></li>
<li><a
href="https://github.com/charliermarsh "><code>@charliermarsh</code></a></li>
<li><a href="https://github.com/ntBre "><code>@ntBre</code></a></li>
<li><a
href="https://github.com/kar-ganap "><code>@kar-ganap</code></a></li>
</ul>
<h2>Install ruff 0.15.5</h2>
<h3>Install prebuilt binaries via shell script</h3>
<pre lang="sh"><code>curl --proto '=https' --tlsv1.2 -LsSf
https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-installer.sh
| sh
</code></pre>
<h3>Install prebuilt binaries via powershell script</h3>
<!-- 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.15.5</h2>
<p>Released on 2026-03-05.</p>
<h3>Preview features</h3>
<ul>
<li>Discover Markdown files by default in preview mode (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23434 ">#23434</a>)</li>
<li>[<code>perflint</code>] Extend <code>PERF102</code> to
comprehensions and generators (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23473 ">#23473</a>)</li>
<li>[<code>refurb</code>] Fix <code>FURB101</code> and
<code>FURB103</code> false positives when I/O variable is used later (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23542 ">#23542</a>)</li>
<li>[<code>ruff</code>] Add fix for
<code>none-not-at-end-of-union</code> (<code>RUF036</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22829 ">#22829</a>)</li>
<li>[<code>ruff</code>] Fix false positive for <code>re.split</code>
with empty string pattern (<code>RUF055</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23634 ">#23634</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>[<code>fastapi</code>] Handle callable class dependencies with
<code>__call__</code> method (<code>FAST003</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23553 ">#23553</a>)</li>
<li>[<code>pydocstyle</code>] Fix numpy section ordering
(<code>D420</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23685 ">#23685</a>)</li>
<li>[<code>pyflakes</code>] Fix false positive for names shadowing
re-exports (<code>F811</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23356 ">#23356</a>)</li>
<li>[<code>pyupgrade</code>] Avoid inserting redundant <code>None</code>
elements in <code>UP045</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23459 ">#23459</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Document extension mapping for Markdown code formatting (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23574 ">#23574</a>)</li>
<li>Update default Python version examples (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23605 ">#23605</a>)</li>
</ul>
<h3>Other changes</h3>
<ul>
<li>Publish releases to Astral mirror (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23616 ">#23616</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a
href="https://github.com/amyreese "><code>@amyreese</code></a></li>
<li><a
href="https://github.com/stakeswky "><code>@stakeswky</code></a></li>
<li><a
href="https://github.com/chirizxc "><code>@chirizxc</code></a></li>
<li><a
href="https://github.com/anishgirianish "><code>@anishgirianish</code></a></li>
<li><a href="https://github.com/bxff "><code>@bxff</code></a></li>
<li><a href="https://github.com/zsol "><code>@zsol</code></a></li>
<li><a
href="https://github.com/charliermarsh "><code>@charliermarsh</code></a></li>
<li><a href="https://github.com/ntBre "><code>@ntBre</code></a></li>
<li><a
href="https://github.com/kar-ganap "><code>@kar-ganap</code></a></li>
</ul>
<h2>0.15.4</h2>
<p>Released on 2026-02-26.</p>
<p>This is a follow-up release to 0.15.3 that resolves a panic when the
new rule <code>PLR1712</code> was enabled with any rule that analyzes
definitions, such as many of the <code>ANN</code> or <code>D</code>
rules.</p>
<h3>Bug fixes</h3>
<ul>
<li>Fix panic on access to definitions after analyzing definitions (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23588 ">#23588</a>)</li>
<li>[<code>pyflakes</code>] Suppress false positive in <code>F821</code>
for names used before <code>del</code> in stub files (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23550 ">#23550</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/5e4a3d9c3b381df20f6a52caef0f56ed0ebc74be "><code>5e4a3d9</code></a>
Bump 0.15.5 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/23743 ">#23743</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/69c23cc5a3a6cb08d81b01c7d1c2ba0482c3a3b1 "><code>69c23cc</code></a>
[ty] Render all changed diagnostics in conformance.py (<a
href="https://redirect.github.com/astral-sh/ruff/issues/23613 ">#23613</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/4926bd58204839cb75a8ed1397e824bbc8f644ca "><code>4926bd5</code></a>
[ty] Split deferred checks out of <code>types/infer/builder.rs</code>
(<a
href="https://redirect.github.com/astral-sh/ruff/issues/23740 ">#23740</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/9a70f5eb2fb0180953418cd6ac037cb3d531e77b "><code>9a70f5e</code></a>
Discover markdown files by default in preview mode (<a
href="https://redirect.github.com/astral-sh/ruff/issues/23434 ">#23434</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/3dc78b0a84ee231afb1c3329e11bfc912c236366 "><code>3dc78b0</code></a>
[ty] Use <code>HasOptionalDefinition</code> for <code>except</code>
handlers (<a
href="https://redirect.github.com/astral-sh/ruff/issues/23739 ">#23739</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/a6a5e8d10b8a5185049827be0a304db522b91c9a "><code>a6a5e8d</code></a>
[ty] Fix precedence of <code>all</code> selector in TOML configurations
(<a
href="https://redirect.github.com/astral-sh/ruff/issues/23723 ">#23723</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/2a5384b0b6e22ab511aec6f8dbb11648befda887 "><code>2a5384b</code></a>
[ty] Make <code>all</code> selector case sensitive (<a
href="https://redirect.github.com/astral-sh/ruff/issues/23713 ">#23713</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/db77d7b2ae3da8deed64d8889a5cbcea287b52a6 "><code>db77d7b</code></a>
[ty] Add a diagnostic if a <code>TypeVar</code> is used to specialize a
<code>ParamSpec</code>, or ...</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/db2849068f7d6a1f42cdafec46a7c2c83d39ece3 "><code>db28490</code></a>
[ty] Override home directory in ty tests (<a
href="https://redirect.github.com/astral-sh/ruff/issues/23724 ">#23724</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/5f0fd91a230972bb9d1e4545ebaed2b7d09158a2 "><code>5f0fd91</code></a>
[ty] More type-variable default validation (<a
href="https://redirect.github.com/astral-sh/ruff/issues/23639 ">#23639</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/ruff/compare/0.15.1...0.15.5 ">compare
view</a></li>
</ul>
</details>
<br />
Updates `codespell` from 2.4.1 to 2.4.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/codespell-project/codespell/releases ">codespell's
releases</a>.</em></p>
<blockquote>
<h2>v2.4.2</h2>
<!-- raw HTML omitted -->
<h2>Highlights</h2>
<ul>
<li>Fixed compatibility with chardet 7+</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>Fix and clarify cases in ignore patterns by <a
href="https://github.com/DanielYang59 "><code>@DanielYang59</code></a>
in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3583 ">codespell-project/codespell#3583</a></li>
<li>codespell-private.yml: Do not codespell digital signature files by
<a href="https://github.com/cclauss "><code>@cclauss</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3623 ">codespell-project/codespell#3623</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/codespell-project/codespell/pull/3634 ">codespell-project/codespell#3634</a></li>
<li>numbes->numbers and numbesr->numbers by <a
href="https://github.com/skshetry "><code>@skshetry</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3635 ">codespell-project/codespell#3635</a></li>
<li>Add spelling corrections for disclose and variables. by <a
href="https://github.com/cfi-gb "><code>@cfi-gb</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3622 ">codespell-project/codespell#3622</a></li>
<li>Add spelling correction for Vulnererability and variants. by <a
href="https://github.com/cfi-gb "><code>@cfi-gb</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3625 ">codespell-project/codespell#3625</a></li>
<li>Remove lets->let's by <a
href="https://github.com/Piedone "><code>@Piedone</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3633 ">codespell-project/codespell#3633</a></li>
<li>Add corrections for "dictate" by <a
href="https://github.com/jdufresne "><code>@jdufresne</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3636 ">codespell-project/codespell#3636</a></li>
<li>Add specicification (and pl) typo by <a
href="https://github.com/yarikoptic "><code>@yarikoptic</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3639 ">codespell-project/codespell#3639</a></li>
<li>Remove "blueish" correction by <a
href="https://github.com/hadess "><code>@hadess</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3510 ">codespell-project/codespell#3510</a></li>
<li>Add "lighting" as an option to fix "lighning" by
<a href="https://github.com/yarikoptic "><code>@yarikoptic</code></a> in
<a
href="https://redirect.github.com/codespell-project/codespell/pull/3648 ">codespell-project/codespell#3648</a></li>
<li>Revert adding <code>lien</code> to the rare dictionary by <a
href="https://github.com/nikolaik "><code>@nikolaik</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3631 ">codespell-project/codespell#3631</a></li>
<li>"ane" could have been "one" by <a
href="https://github.com/yarikoptic "><code>@yarikoptic</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3645 ">codespell-project/codespell#3645</a></li>
<li>Add spelling correction for "priort" by <a
href="https://github.com/cfi-gb "><code>@cfi-gb</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3647 ">codespell-project/codespell#3647</a></li>
<li>Remove "fix" of "deques" - it is quite legit by
<a href="https://github.com/yarikoptic "><code>@yarikoptic</code></a> in
<a
href="https://redirect.github.com/codespell-project/codespell/pull/3649 ">codespell-project/codespell#3649</a></li>
<li>Several new suggestions by <a
href="https://github.com/mdeweerd "><code>@mdeweerd</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3621 ">codespell-project/codespell#3621</a></li>
<li>Add proposal constraints to containts by <a
href="https://github.com/mdeweerd "><code>@mdeweerd</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3652 ">codespell-project/codespell#3652</a></li>
<li>Additions dleay,infp,practive,utiliy by <a
href="https://github.com/mdeweerd "><code>@mdeweerd</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3643 ">codespell-project/codespell#3643</a></li>
<li>Add calncelled and its variations by <a
href="https://github.com/mdeweerd "><code>@mdeweerd</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3650 ">codespell-project/codespell#3650</a></li>
<li>Use raw strings for regex by <a
href="https://github.com/DimitriPapadopoulos "><code>@DimitriPapadopoulos</code></a>
in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3654 ">codespell-project/codespell#3654</a></li>
<li>Allow multiple spaces before codespell:ignore by <a
href="https://github.com/DimitriPapadopoulos "><code>@DimitriPapadopoulos</code></a>
in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3653 ">codespell-project/codespell#3653</a></li>
<li>Added correction from <code>timeour</code> to <code>timeout</code>
by <a href="https://github.com/jamesbraza "><code>@jamesbraza</code></a>
in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3656 ">codespell-project/codespell#3656</a></li>
<li>Add typos found in various software projects by <a
href="https://github.com/luzpaz "><code>@luzpaz</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3640 ">codespell-project/codespell#3640</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/codespell-project/codespell/pull/3659 ">codespell-project/codespell#3659</a></li>
<li>Add codespell suggestions for enabke and friends by <a
href="https://github.com/mdeweerd "><code>@mdeweerd</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3657 ">codespell-project/codespell#3657</a></li>
<li>END: add "queues" (plural from queue) as possible fix for
ques by <a
href="https://github.com/yarikoptic "><code>@yarikoptic</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3591 ">codespell-project/codespell#3591</a></li>
<li>agreegate, lesda, realod, colouer by <a
href="https://github.com/mdeweerd "><code>@mdeweerd</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3665 ">codespell-project/codespell#3665</a></li>
<li>Update pre-commit version in documentation by <a
href="https://github.com/prchoward "><code>@prchoward</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3666 ">codespell-project/codespell#3666</a></li>
<li>MAINT: Rename CI file and run name by <a
href="https://github.com/larsoner "><code>@larsoner</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3667 ">codespell-project/codespell#3667</a></li>
<li>preoccuption->preoccupation; occuption->occupation by <a
href="https://github.com/TheGiraffe3 "><code>@TheGiraffe3</code></a> in
<a
href="https://redirect.github.com/codespell-project/codespell/pull/3668 ">codespell-project/codespell#3668</a></li>
<li>Suggestions for: checkto, diminsion, waitfor by <a
href="https://github.com/mdeweerd "><code>@mdeweerd</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3670 ">codespell-project/codespell#3670</a></li>
<li>Typos found in sigstore-python by <a
href="https://github.com/DimitriPapadopoulos "><code>@DimitriPapadopoulos</code></a>
in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3664 ">codespell-project/codespell#3664</a></li>
<li>usgin->using by <a
href="https://github.com/ydah "><code>@ydah</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3672 ">codespell-project/codespell#3672</a></li>
<li>Add typos found in various software projects by <a
href="https://github.com/luzpaz "><code>@luzpaz</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3669 ">codespell-project/codespell#3669</a></li>
<li>Add coered -> coerced by <a
href="https://github.com/effigies "><code>@effigies</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3680 ">codespell-project/codespell#3680</a></li>
<li>backwward(s)->backward(s), onwward(s)->onward(s) by <a
href="https://github.com/cjwatson "><code>@cjwatson</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3682 ">codespell-project/codespell#3682</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/codespell-project/codespell/pull/3685 ">codespell-project/codespell#3685</a></li>
<li>telemetery->telemetry by <a
href="https://github.com/august-soderberg "><code>@august-soderberg</code></a>
in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3686 ">codespell-project/codespell#3686</a></li>
<li>Add hexedacimal and similar typos by <a
href="https://github.com/Akuli "><code>@Akuli</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3692 ">codespell-project/codespell#3692</a></li>
<li>Add rounted->routed, rounded and friends by <a
href="https://github.com/peternewman "><code>@peternewman</code></a> in
<a
href="https://redirect.github.com/codespell-project/codespell/pull/3693 ">codespell-project/codespell#3693</a></li>
<li>Add symmectric and similar typos by <a
href="https://github.com/Akuli "><code>@Akuli</code></a> in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3694 ">codespell-project/codespell#3694</a></li>
<li>Fix CI on Windows: pip upgrade pip by <a
href="https://github.com/DimitriPapadopoulos "><code>@DimitriPapadopoulos</code></a>
in <a
href="https://redirect.github.com/codespell-project/codespell/pull/3698 ">codespell-project/codespell#3698</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/codespell-project/codespell/commit/2ccb47ff45ad361a21071a7eedda4c37e6ae8c5a "><code>2ccb47f</code></a>
Compat with chardet 7 (<a
href="https://redirect.github.com/codespell-project/codespell/issues/3886 ">#3886</a>)</li>
<li><a
href="https://github.com/codespell-project/codespell/commit/4ec53bf6a3e510c64900d5ee838abd99d49b2910 "><code>4ec53bf</code></a>
[pre-commit.ci] pre-commit autoupdate</li>
<li><a
href="https://github.com/codespell-project/codespell/commit/2a4acba3f282f1b5ccb7ad8b57bc991810663a44 "><code>2a4acba</code></a>
Bump actions/download-artifact from 7 to 8</li>
<li><a
href="https://github.com/codespell-project/codespell/commit/be17cacc96a5ee3f014e048f5962cfdb7145e096 "><code>be17cac</code></a>
Bump actions/upload-artifact from 6 to 7</li>
<li><a
href="https://github.com/codespell-project/codespell/commit/04a071280d56148cab14249ccc8d4181c0066b3c "><code>04a0712</code></a>
Bump ruff (<a
href="https://redirect.github.com/codespell-project/codespell/issues/3879 ">#3879</a>)</li>
<li><a
href="https://github.com/codespell-project/codespell/commit/583d8796d92eb58e15072db03e5b756be45f638a "><code>583d879</code></a>
avoide->avoid, avoided, avoids,</li>
<li><a
href="https://github.com/codespell-project/codespell/commit/1f59f34d7c6d1642fdb325d9dfa49cf9eb5f692a "><code>1f59f34</code></a>
Add correction for 'foudation' to 'foundation'</li>
<li><a
href="https://github.com/codespell-project/codespell/commit/e047fdafb8620b08a86349014487886bcd9c2205 "><code>e047fda</code></a>
Add spelling correction for gather and variants.</li>
<li><a
href="https://github.com/codespell-project/codespell/commit/b5cd66de14b8f65b0f45fabbe1c89bd69ea60939 "><code>b5cd66d</code></a>
respondant->respondent</li>
<li><a
href="https://github.com/codespell-project/codespell/commit/92125a3814fa6e86cd2055385916ce5186d3e5df "><code>92125a3</code></a>
Add detection of ivoice and variants.</li>
<li>Additional commits viewable in <a
href="https://github.com/codespell-project/codespell/compare/v2.4.1...v2.4.2 ">compare
view</a></li>
</ul>
</details>
<br />
Updates `ty` from 0.0.17 to 0.0.21
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/ty/releases ">ty's
releases</a>.</em></p>
<blockquote>
<h2>0.0.21</h2>
<h2>Release Notes</h2>
<p>Released on 2026-03-05.</p>
<h3>Bug fixes</h3>
<ul>
<li>Avoid stack overflow with recursive typevar (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23652 ">#23652</a>)</li>
<li>Fix panic on incomplete except handlers (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23708 ">#23708</a>)</li>
<li>Allow unions of different-length iterables in <code>*args</code>
unpacking into optional positional parameters (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23124 ">#23124</a>)</li>
<li>Don't replace <code>Any</code> attributes with <code>object</code>
after <code>isinstance</code> narrowing (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23725 ">#23725</a>)</li>
</ul>
<h3>LSP server</h3>
<ul>
<li>Exclude decorators from class/def code folding (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23543 ">#23543</a>)</li>
<li>Fix handling of non-Python text documents (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23704 ">#23704</a>)</li>
</ul>
<h3>Configuration</h3>
<ul>
<li>Add <code>all</code> selector to <code>ty.json</code> schema (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23721 ">#23721</a>)</li>
<li>Fix precedence of <code>all</code> selector in TOML configurations
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/23723 ">#23723</a>)</li>
<li>Make <code>all</code> selector case-sensitive (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23713 ">#23713</a>)</li>
</ul>
<h3>Type checking</h3>
<ul>
<li>Add <code>invalid-enum-member-annotation</code> lint rule (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23648 ">#23648</a>)</li>
<li>Add a diagnostic for an unused awaitable (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23650 ">#23650</a>)</li>
<li>Add a diagnostic if a <code>TypeVar</code> is used to specialize a
<code>ParamSpec</code>, or vice versa (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23738 ">#23738</a>)</li>
<li>Add more type-variable default validation (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23639 ">#23639</a>)</li>
<li>Add unbound type variable detection in annotations (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23641 ">#23641</a>)</li>
<li>Apply narrowing to walrus values (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23687 ">#23687</a>)</li>
<li>Do not union <code>Unknown</code> into unannotated container types
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/23718 ">#23718</a>)</li>
<li>Avoid inferring generics with negative intersections (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23750 ">#23750</a>)</li>
<li>More precise types for <code>name</code> and <code>value</code> of
an enum (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23683 ">#23683</a>)</li>
<li>Better preserve user-provided union order in inferred
specializations (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23715 ">#23715</a>)</li>
<li>Support narrowing in ternary expressions (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23726 ">#23726</a>)</li>
<li>Validate bare ParamSpec usage in type annotations, and support
stringified ParamSpecs as the first argument to <code>Callable</code>
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/23625 ">#23625</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a
href="https://github.com/charliermarsh "><code>@charliermarsh</code></a></li>
<li><a href="https://github.com/zsol "><code>@zsol</code></a></li>
<li><a href="https://github.com/Gankra "><code>@Gankra</code></a></li>
<li><a
href="https://github.com/MichaReiser "><code>@MichaReiser</code></a></li>
<li><a
href="https://github.com/AlexWaygood "><code>@AlexWaygood</code></a></li>
<li><a href="https://github.com/rizzip "><code>@rizzip</code></a></li>
<li><a
href="https://github.com/iksuddle "><code>@iksuddle</code></a></li>
<li><a
href="https://github.com/dcreager "><code>@dcreager</code></a></li>
<li><a
href="https://github.com/BurntSushi "><code>@BurntSushi</code></a></li>
<li><a href="https://github.com/carljm "><code>@carljm</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/ty/blob/main/CHANGELOG.md ">ty's
changelog</a>.</em></p>
<blockquote>
<h2>0.0.21</h2>
<p>Released on 2026-03-05.</p>
<h3>Bug fixes</h3>
<ul>
<li>Avoid stack overflow with recursive typevar (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23652 ">#23652</a>)</li>
<li>Fix panic on incomplete except handlers (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23708 ">#23708</a>)</li>
<li>Allow unions of different-length iterables in <code>*args</code>
unpacking into optional positional parameters (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23124 ">#23124</a>)</li>
<li>Don't replace <code>Any</code> attributes with <code>object</code>
after <code>isinstance</code> narrowing (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23725 ">#23725</a>)</li>
</ul>
<h3>LSP server</h3>
<ul>
<li>Exclude decorators from class/def code folding (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23543 ">#23543</a>)</li>
<li>Fix handling of non-Python text documents (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23704 ">#23704</a>)</li>
</ul>
<h3>Configuration</h3>
<ul>
<li>Add <code>all</code> selector to <code>ty.json</code> schema (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23721 ">#23721</a>)</li>
<li>Fix precedence of <code>all</code> selector in TOML configurations
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/23723 ">#23723</a>)</li>
<li>Make <code>all</code> selector case-sensitive (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23713 ">#23713</a>)</li>
</ul>
<h3>Type checking</h3>
<ul>
<li>Add <code>invalid-enum-member-annotation</code> lint rule (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23648 ">#23648</a>)</li>
<li>Add a diagnostic for an unused awaitable (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23650 ">#23650</a>)</li>
<li>Add a diagnostic if a <code>TypeVar</code> is used to specialize a
<code>ParamSpec</code>, or vice versa (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23738 ">#23738</a>)</li>
<li>Add more type-variable default validation (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23639 ">#23639</a>)</li>
<li>Add unbound type variable detection in annotations (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23641 ">#23641</a>)</li>
<li>Apply narrowing to walrus values (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23687 ">#23687</a>)</li>
<li>Do not union <code>Unknown</code> into unannotated container types
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/23718 ">#23718</a>)</li>
<li>Avoid inferring generics with negative intersections (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23750 ">#23750</a>)</li>
<li>More precise types for <code>name</code> and <code>value</code> of
an enum (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23683 ">#23683</a>)</li>
<li>Better preserve user-provided union order in inferred
specializations (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23715 ">#23715</a>)</li>
<li>Support narrowing in ternary expressions (<a
href="https://redirect.github.com/astral-sh/ruff/pull/23726 ">#23726</a>)</li>
<li>Validate bare ParamSpec usage in type annotations, and support
stringified ParamSpecs as the first argument to <code>Callable</code>
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/23625 ">#23625</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a
href="https://github.com/charliermarsh "><code>@charliermarsh</code></a></li>
<li><a href="https://github.com/zsol "><code>@zsol</code></a></li>
<li><a href="https://github.com/Gankra "><code>@Gankra</code></a></li>
<li><a
href="https://github.com/MichaReiser "><code>@MichaReiser</code></a></li>
<li><a
href="https://github.com/AlexWaygood "><code>@AlexWaygood</code></a></li>
<li><a href="https://github.com/rizzip "><code>@rizzip</code></a></li>
<li><a
href="https://github.com/iksuddle "><code>@iksuddle</code></a></li>
<li><a
href="https://github.com/dcreager "><code>@dcreager</code></a></li>
<li><a
href="https://github.com/BurntSushi "><code>@BurntSushi</code></a></li>
<li><a href="https://github.com/carljm "><code>@carljm</code></a></li>
<li><a
href="https://github.com/oconnor663 "><code>@oconnor663</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/ty/commit/c1ad9f28136df1678348359dcb859117d5a21b37 "><code>c1ad9f2</code></a>
Bump version to 0.0.21 (<a
href="https://redirect.github.com/astral-sh/ty/issues/2973 ">#2973</a>)</li>
<li><a
href="https://github.com/astral-sh/ty/commit/065338a1fcc24ac5b974724dbb5d8a3ab740c5b7 "><code>065338a</code></a>
Add typeshed diff link to changelog during release (<a
href="https://redirect.github.com/astral-sh/ty/issues/2957 ">#2957</a>)</li>
<li><a
href="https://github.com/astral-sh/ty/commit/fba59f6af85e9f49d58bcc24601b915a4c9ebc65 "><code>fba59f6</code></a>
Fix renovate <code>actions/*-artifact</code> updates (<a
href="https://redirect.github.com/astral-sh/ty/issues/2956 ">#2956</a>)</li>
<li><a
href="https://github.com/astral-sh/ty/commit/bad4a9771fcbe172411e18813926d182ac80ba4f "><code>bad4a97</code></a>
Update actions/download-artifact digest to 70fc10c (<a
href="https://redirect.github.com/astral-sh/ty/issues/2933 ">#2933</a>)</li>
<li><a
href="https://github.com/astral-sh/ty/commit/04a5216ada0638640ce9c0e57986ee9ce2492c45 "><code>04a5216</code></a>
Update actions/upload-artifact digest to bbbca2d (<a
href="https://redirect.github.com/astral-sh/ty/issues/2934 ">#2934</a>)</li>
<li><a
href="https://github.com/astral-sh/ty/commit/c8bc09cda6604613320eae9b4fb184b1fec7273d "><code>c8bc09c</code></a>
Hook up publish job to release pipeline (<a
href="https://redirect.github.com/astral-sh/ty/issues/2953 ">#2953</a>)</li>
<li><a
href="https://github.com/astral-sh/ty/commit/2bd0252435a1ad19b91863f37beab60bb8e68a14 "><code>2bd0252</code></a>
Bump version to 0.0.20 (<a
href="https://redirect.github.com/astral-sh/ty/issues/2939 ">#2939</a>)</li>
<li><a
href="https://github.com/astral-sh/ty/commit/08f4e9f152431bbacd956a62c5145255d0241a25 "><code>08f4e9f</code></a>
Publish releases to Astral mirror (<a
href="https://redirect.github.com/astral-sh/ty/issues/2921 ">#2921</a>)</li>
<li><a
href="https://github.com/astral-sh/ty/commit/983105f032ab355347a66a107e53f3fe75b6a616 "><code>983105f</code></a>
Update prek dependencies (<a
href="https://redirect.github.com/astral-sh/ty/issues/2936 ">#2936</a>)</li>
<li><a
href="https://github.com/astral-sh/ty/commit/ece21b6c8eeab4bc889ed88ea0f86cbc504757ff "><code>ece21b6</code></a>
Update astral-sh/setup-uv action to v7.3.1 (<a
href="https://redirect.github.com/astral-sh/ty/issues/2935 ">#2935</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/ty/compare/0.0.17...0.0.21 ">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 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: John Kennedy <65985482+jkennedyvz@users.noreply.github.com >
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-09 21:42:29 -04:00
Sydney Runkle and GitHub
9c2deacb28
fix: replay behavior for parent + subgraphs! ( #7038 )
...
## Summary
Fix time travel (replay and fork) for graphs with interrupts and
subgraphs.
## Problem
Two issues with replaying/forking from earlier checkpoints:
1. **Stale interrupt values during replay** — Replays incorrectly reused
cached `RESUME` values from prior `interrupt()` calls, so interrupts
silently returned stale answers instead of re-firing.
2. **Wrong subgraph state during time travel** — Subgraphs always loaded
their **latest** checkpoint instead of the one corresponding to the
parent's historical state. This caused subgraphs to skip execution or
produce incorrect results during replay/fork.
## Changes
Code changes span `libs/langgraph/langgraph/pregel/_loop.py`,
`libs/langgraph/langgraph/_internal/_constants.py`, and a new
`libs/langgraph/langgraph/_internal/_replay.py` module:
- **Strip stale `RESUME` writes on replay** — During replays, cached
`RESUME` writes are filtered out so `interrupt()` re-fires instead of
returning old values. Genuine resumes (`Command(resume=...)`) preserve
these writes.
- **Rename `skip_done_tasks` → `is_replaying`** — Clearer naming for the
flag that tracks whether the current run is replaying from a specific
checkpoint.
- **New `ReplayState` class (`_replay.py`)** — Encapsulates subgraph
checkpoint loading during time-travel. Tracks a parent checkpoint ID
upper bound and which subgraph namespaces have already loaded their
pre-replay checkpoint. On the first visit to a subgraph namespace, it
loads the latest checkpoint created *before* the replay point (via
`checkpointer.list(..., before=...)` with `limit=1`). On subsequent
visits (e.g. the same subgraph in a later loop iteration), it falls back
to normal latest-checkpoint loading. The task-id suffix is stripped from
namespaces so the same logical subgraph is recognized across loop
iterations.
- **New `CONFIG_KEY_REPLAY_STATE` config key** — The parent graph
creates a `ReplayState` instance and passes it to subgraphs via config.
For forks (`source=update`), the replay state uses the fork's parent
checkpoint ID since the fork was created after the subgraph's original
checkpoints. The single `ReplayState` instance is shared by reference
across all derived configs within one parent execution.
- **Subgraph checkpoint loading in `__enter__`/`__aenter__`** — When a
subgraph detects a `ReplayState` in its config, it delegates checkpoint
loading to `ReplayState.get_checkpoint`/`aget_checkpoint` instead of
using the default `get_tuple`. It also clears `CONFIG_KEY_RESUMING` so
`_first` re-applies input and recreates ephemeral routing channels.
## Tests
New test files `test_time_travel.py` (~2500 lines) and
`test_time_travel_async.py` (~2200 lines) covering:
- Replay and fork with interrupts (single and multiple)
- Replay and fork for graphs with and without subgraphs
- Correct subgraph checkpoint restoration during parent time travel
- `get_state` with subgraph state during replay
2026-03-09 21:21:26 -04:00