From 8e77945f406926c5b26f4f4fe2a8a1983a60156a Mon Sep 17 00:00:00 2001 From: Quanzheng Long Date: Wed, 1 Jul 2026 10:59:45 -0700 Subject: [PATCH] fix: preserve updated_channels shape in update_state delta path The supersteps-based delta history walk requires update_state to write counters_since_delta_snapshot metadata, but passing updated_channels to create_checkpoint also overrode checkpoint["updated_channels"] (was None), breaking deferred-node triggering on resume for non-delta graphs (test_in_one_fan_out_state_graph_defer_node). Keep updated_channels at its default so resume/trigger semantics are unchanged; still write the counter metadata and snapshot delta channels that hit their cadence. Co-Authored-By: Claude Opus 4.8 (1M context) --- libs/langgraph/langgraph/pregel/main.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/libs/langgraph/langgraph/pregel/main.py b/libs/langgraph/langgraph/pregel/main.py index 8f852145c..6f2bb8fd2 100644 --- a/libs/langgraph/langgraph/pregel/main.py +++ b/libs/langgraph/langgraph/pregel/main.py @@ -2045,11 +2045,14 @@ class Pregel( saved.metadata if saved else None, updated_channel_names, ) + # Keep `updated_channels` at its default (None) — matching the + # historical checkpoint shape here — so resume/trigger semantics + # (e.g. deferred nodes) are unaffected. `get_next_version` / + # `channels_to_snapshot` are no-ops unless a delta channel snapshots. checkpoint = create_checkpoint( checkpoint, channels, step + 1, - updated_channels=updated_channel_names, get_next_version=checkpointer.get_next_version, channels_to_snapshot=channels_to_snapshot, ) @@ -2535,11 +2538,14 @@ class Pregel( saved.metadata if saved else None, updated_channel_names, ) + # Keep `updated_channels` at its default (None) — matching the + # historical checkpoint shape here — so resume/trigger semantics + # (e.g. deferred nodes) are unaffected. `get_next_version` / + # `channels_to_snapshot` are no-ops unless a delta channel snapshots. checkpoint = create_checkpoint( checkpoint, channels, step + 1, - updated_channels=updated_channel_names, get_next_version=checkpointer.get_next_version, channels_to_snapshot=channels_to_snapshot, )