LABEL CHECK / DOSSIER
LangGraph
closure trend: zero closures to date — all four serialization deltas and the double-interrupt delta, first published 2026-03-29 against v1.0.10, remain open in the 1.2.x line (re-verified 2026-06-11); #6718 was closed once and reopened
Verdict
LangGraph's orchestration, streaming, and adoption claims hold as labeled, but its durable-execution and persistence label rests on a checkpoint layer whose documented enum and failure handling silently corrupts state — four serialization bugs, a double-interrupt snapshot bug, and a sync/async recovery divergence all re-verified open on 2026-06-28 against the 1.2.6 release line, the entire v1.0.10→1.2.4 span since Theory Delta first published them on 2026-03-29.
Claim ledger — 12 rows
Delta ledger — 14 open
JsonPlusSerializer silently replaces failed deserializations with None — checkpoint restore cannot be trusted without post-restore validation
closes when:A checkpoint round-trip whose value fails deserialization raises an exception instead of restoring None, re-verified on a current release
evidence:[1]Re-verified open 2026-06-28 against langgraph==1.2.6
StrEnum fields silently coerced to plain str on checkpoint round-trip — type information lost
closes when:StrEnum fields restore from a checkpoint round-trip as StrEnum (isinstance check passes), re-verified on a current release
evidence:[1]Re-verified open 2026-06-28 against langgraph==1.2.6
Nested Enum fields become None after checkpoint deserialization (closed once, reopened 2026-01-24)
closes when:Nested Enum fields restore with their original values after checkpoint deserialization, re-verified on a current release
evidence:[1]Re-verified open 2026-06-28 against langgraph==1.2.6
BinaryOperatorAggregate stores the Overwrite wrapper instead of the payload when the initial value is MISSING
closes when:A BinaryOperatorAggregate channel whose initial value is MISSING stores the unwrapped payload, not the Overwrite wrapper, re-verified on a current release
evidence:[1]Re-verified open 2026-06-28 against langgraph==1.2.6
get_state().next returns empty after the first of two interrupt() calls — paused graph reports complete, approval gates can be silently skipped
closes when:get_state().next reports the paused node after resuming the first of two interrupt() calls in one node, re-verified on a current release
evidence:[1]Re-verified open 2026-06-28 against langgraph==1.2.6
Sync checkpoint path caches ERROR/INTERRUPT writes that the async path guards against — recovery behavior differs by execution mode
closes when:Sync and async checkpoint paths produce identical write sets for ERROR/INTERRUPT states, re-verified on a current release
evidence:[1]Re-verified open 2026-06-28 against langgraph==1.2.6
Command(resume=None) crashes the resume flow with UnboundLocalError
closes when:Command(resume=None) either resumes cleanly or raises a clear validation error instead of UnboundLocalError, re-verified on a current release
evidence:[1]Re-verified open 2026-06-28 against langgraph==1.2.6
Platform double-texting Interrupt strategy returns merged combined outputs instead of halting the prior run with isolated preserved progress
closes when:A concurrent request under the Interrupt double-texting strategy halts the prior run and returns its partial output isolated from the new run, re-verified against the deployed platform
evidence:[1]Re-verified open 2026-06-28 against langgraph==1.2.6
Multi-tenant checkpoint isolation not enforced at the framework level — thread scoping is application code's responsibility; cross-tenant state access reported in production
closes when:Checkpoint-level tenant scoping or namespace access control ships such that one thread's state cannot be read across tenants without application-layer guards, re-verified
evidence:[1]UPDATE 2026-06-28: the dev.to article no longer contains the cross-tenant claim (mutable source drift); the underlying behavior is corroborated by https://docs.langchain.com/langgraph-platform/auth (HTTP 200, developer-scoped isolation)Re-verified open 2026-06-28 against langgraph==1.2.6
langchain-mcp-adapters fails entirely when any single MCP server is down — no partial initialization or graceful degradation
closes when:MultiServerMCPClient initializes with unavailable servers skipped with a warning while the remaining servers' tools stay available, re-verified on a current release
evidence:[1]Re-verified open 2026-06-28 against langgraph==1.2.6
langchain-mcp-adapters ProxyUser serialization breaks on LangGraph Cloud while working locally — passes local testing, fails in deployment
closes when:MCP tool invocation with a ProxyUser auth context succeeds on LangGraph Cloud as it does locally, re-verified
evidence:[1]Re-verified open 2026-06-28 against langgraph==1.2.6
Race condition in PregelLoop.put_writes() silently loses checkpoint writes under concurrent Send tasks — fix PR #8114 closed unmerged
closes when:Concurrent Send tasks writing to the checkpoint produce the complete write set (no lost writes) under a stress test, re-verified on a current release
Checkpoint serialization failure class expanding — dict subclasses lose type fidelity (#8184) and Fraction/complex raise TypeError (#8185)
closes when:dict-subclass and Fraction/complex state values round-trip through a checkpoint with type preserved and no exception, re-verified on a current release
MCP tool parameter named "config" silently overwritten by RunnableConfig injection (langchain-mcp-adapters #532)
closes when:An MCP tool with a parameter named 'config' receives the caller's value rather than LangChain's injected RunnableConfig, re-verified on a current release
evidence:[1]
Methodology
- sampling
- Material-claims sampling rule (strategy/method.md §2, label-check methodology D0086): a claim is sampled iff it appears on the product's own label and would plausibly influence an adoption decision. Sampling frame: the langchain-ai/langgraph README (core benefits and ecosystem sections), the docs.langchain.com LangGraph overview, persistence, durable-execution, and streaming pages, and the LangGraph Platform double-texting and auth pages — label captured 2026-06-11. All material claims found on these surfaces are sampled (12 found).
- verification depth
- source-reviewed — not executed by Theory Delta
- verification statement
- Evidence is drawn from the project's own issue tracker, release history, and published documentation, plus third-party production reports. All load-bearing GitHub issue statuses (langgraph #6970, #6598, #6718, #6909, #6956, #7015, #7034; langchain-ai/docs #474; langchain-mcp-adapters #401, #416) were re-verified open on 2026-06-28 against the langgraph==1.2.6 release line (released 2026-06-18); 1.2.5 and 1.2.6 shipped no fixes for any tracked delta. Theory Delta has not executed LangGraph in its own environment for this dossier. Quantitative vendor-adjacent metrics (star counts, blog-reported PyPI download figures) are treated as unreliable and excluded from assessment.
- backing confidence
- secondary-research
- strongest case against
- All non-as_labeled verdicts rest on open-issue review, not execution: an open issue does not prove the behavior reproduces on langgraph==1.2.4, and most of the serialization bugs were filed against the 1.0.x line — a fix could have shipped without the issue being closed. The serialization failures affect specific type patterns; pipelines that checkpoint only primitive types never hit them, and a postmortem review in the backing corpus found real-world failures were mostly environmental rather than structural. LangGraph ships multiple releases per month (volatile decay class), so any specific row can go stale within weeks of the last-verified date.