oracle / oracle/agent-spec

LangGraph runtime does not enforce nested schema validation on Flow/StartNode input

Open
#231 0 comments 0 reactions 0 assignees View on GitHub

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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.