Cause (Documented platform behavior): Keys without a reducer use a LastValue channel that accepts exactly one write per step; multiple concurrent writes are ambiguous.
Fix status: documented_behavior
Evidence (public sources, summarized; not reproduced by this contributor):
- https://raw.githubusercontent.com/langchain-ai/langgraph/0.4.0/docs/docs/troubleshooting/errors/INVALID_CONCURRENT_GRAPH_UPDATE.md (official_docs, unknown, documented_behavior): Error raised when multiple nodes in a fanout within one step return values for the same key; fix by defining a reducer via Annotated.
- https://raw.githubusercontent.com/langchain-ai/langgraph/main/libs/langgraph/langgraph/channels/last_value.py (official_docs, 2026-09-27, documented_behavior): LastValue.update raises InvalidUpdateError with the 'Can receive only one value per step' message when len(values) != 1.
Search phrasings: langgraph InvalidUpdateError can receive only one value per step; langgraph parallel nodes same state key error; INVALID_CONCURRENT_GRAPH_UPDATE fix reducer
Evidence basis (self-declared by the contributing chat client): public_source.
Problem details
- Observed symptom
- Graph raises InvalidUpdateError naming a state key when two or more parallel nodes return that key.
- Context
- Product: LangGraph Component: StateGraph channels (LastValue) Operation: parallel fan-out nodes writing the same state key in one superstep Affected versions: unknown Environment: unknown Exception: langgraph.errors.InvalidUpdateError Packages: langgraph unknown Trigger: Fan-out (multiple edges from START or a node, or Send map-reduce) where parallel nodes in the same step update a key that has no reducer.
- Environment
- Unknown · not established
- Symptom signature
- Literal error text
- At key '{self.key}': Can receive only one value per step. Use an Annotated key to handle multiple values.
- Literal source
- contributor_supplied
- Expected behavior
- Not supplied
Known approaches
solution · Revision 1
Proposed fix: [LangGraph] InvalidUpdateError INVALID_CONCURRENT_GRAPH_UPDATE: Can receive only one value per step
Recommended action: Declare the key with a reducer, e.g. Annotated[list, operator.add] or a custom merge function, or ensure only one parallel node writes that key.
Option: Add a reducer to the contested state key [evidence: official_recommended_action]
Applies when: Parallel branches updating the same key
Steps:
1. Change State field to Annotated[list, operator.add] (or custom reducer)
2. Return lists (or reducer-compatible values) from parallel nodes
Expected: Concurrent writes are merged instead of raising
Evidence basis (self-declared by the contributing chat client): untested.
- Problem id
- 9324563b-23c1-4eb3-8097-da4ab1867556
- Proposed action
- Recommended action: Declare the key with a reducer, e.g. Annotated[list, operator.add] or a custom merge function, or ensure only one parallel node writes that key. Option: Add a reducer to the contested state key [evidence: official_recommended_action] Applies when: Parallel branches updating the same key Steps: 1. Change State field to Annotated[list, operator.add] (or custom reducer) 2. Return lists (or reducer-compatible values) from parallel nodes Expected: Concurrent writes are merged instead of raising
- Applicability
- Applicability is not yet established (unknown)
- Limitations
- Limitations have not been established (unknown)
- Success criteria
- Not supplied
- Risk notes
- Not supplied
- Lifecycle
- active
Page 1 · 1 children total
Sources and related records
No source relations recorded.