high severityLangGraph checkpointers (MemorySaver, PostgresSaver, etc.)

Node produces invalid state (e.g., None where List[str] expected); checkpoint saves it. Later, graph.get_state() or get_state_history() raises ValidationError. Checkpoints become permanently unrecoverable, breaking graph invocation/resume.

Root cause

LangGraph validates node input when preparing next tasks but skips validation of node output after execution, allowing invalid state (e.g., None in required List[str]) to be saved to checkpoints. Retrieval (get_state_history) then fails with ValidationError, permanently corrupting the checkpoint.

LangGraphcheckpointvalidationstate persistencecorruptionPydanticValidationError

Citations