LangGraph runtime does not enforce nested schema validation on Flow/StartNode input
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 421
- Forks
- 60
- Avg merge
- 9h 30m
- Merged PRs (30d)
- 4
Description
The LangGraph Agent Spec runtime accepts a structured Flow/StartNode input that does not conform to the declared Property schema.
The flow declares a nested object property where profile.active is required:
payload
├── name (required)
└── profile (required)
├── score (required)
├── active (required)
└── tags (required)
The serialized Agent Spec correctly contains:
{
"required": ["score", "active", "tags"],
"additionalProperties": false
}
The component is then started with an invalid payload where the required nested field profile.active is missing:
{
"payload": {
"name": "Ada",
"profile": {
"score": 0.98,
"tags": ["verified", "structured"]
}
}
}
Expected Behavior
The runtime should reject the input because it does not conform to the declared payload schema. The required field profile.active is missing.
Actual Behavior
Wayflow
Wayflow rejects the invalid input with a TypeError because the supplied value does not match the expected ObjectProperty.
TypeError: The input passed ... of type `dict` is not of the expected type `ObjectProperty(...)`
LangGraph
LangGraph accepts the same invalid input and completes the flow successfully:
{
"payload": {
"name": "Ada",
"profile": {
"score": 0.98,
"tags": ["verified", "structured"]
}
}
}
No validation error is raised.
Runtime Comparison
| Runtime | Invalid nested input |
|---|---|
| Wayflow | Rejected |
| LangGraph | Accepted |
| Expected | Rejected |
Impact
The same Agent Spec has different input-validation behavior across runtimes.
The LangGraph runtime can therefore accept Flow/StartNode input values that violate the declared Agent Spec property schema, including missing required nested properties.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by locating the LangGraph runtime path that handles Flow/StartNode inputs and applies the declared Property schema, then trace how nested object properties are checked. Reproduce the payload shown here and compare it with the Wayflow behavior; done means the missing profile.active field is rejected with a validation error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend-api-design
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100