LangGraph JS 1.4.19, released on October 3, 2026, fixes subgraph state reads, checkpointed edits and interrupt resumption. The official release matters most to JavaScript and TypeScript teams using checkpointed child graphs, particularly human-approval flows and tools that inspect or edit paused runs.
Upgrade recommendation: prioritize a staged rollout for those workflows. Check what the operator sees, what an edit persists and what the resumed workflow consumes. A correct final answer alone does not exercise all three paths.
Identify your child checkpoint mode
A checkpointer saves execution state so a workflow can continue later. LangChain distinguishes three subgraph modes; leaving the child setting unspecified does not make it stateless.
Child compile setting | Persistence behavior | Upgrade checks to prioritize |
|---|---|---|
Omitted / undefined | Uses the parent saver within each invocation; starts fresh on the next call. | Nested state/history reads and resume from a returned child checkpoint. |
checkpointer: true | Retains child state across calls in the same thread, using the parent saver. | Also check that state edits reach the checkpoint location used by execution. |
checkpointer: false | Disables child checkpointing. | Do not expect persisted child task state or child pause/resume. |
The parent needs a real saver for child persistence. State inspection also requires a discoverable subgraph: one added as a node or called inside a node, not hidden behind a tool function. Inventory the graph hierarchy, not just occurrences of checkpointer: true.
Root-only applications have less direct exposure to these subgraph bugs. The published material does not establish the earliest affected version or justify treating every older deployment as broken.
Separate the three failure modes
An empty reconstructed value.
DeltaChannelrebuilds accumulated state from saved writes instead of storing the full value at every step. Missing the resolved saver during a child-state read could therefore make delta state look empty while ordinary state looked correct. An empty read alone is not proof that writes were deleted. See the channel implementation and patch explanation.An edit saved in the wrong place. For
checkpointer: truechildren, execution and state methods used inconsistent checkpoint namespaces. The patch alignsgetState,getStateHistoryandupdateStatewith the location execution uses. This is separate from reconstructing delta values. See the patched state-method implementation.A resume answer discarded. After replay from a returned subgraph checkpoint, stale-resume filtering could remove the new answer and trigger another prompt. The resume-loop change copies the parent answer after that filtering step.
There is also a diagnostic change: reconstructing a written DeltaChannel without the required saver or config now throws; a never-written channel may still be empty. If that error appears after upgrading, inspect saver/config propagation before adding an empty-array fallback. The new guard makes missing reconstruction context explicit.
Pin the package in staging
Version 1.4.19 is available from the npm registry. For an npm project, inspect the current dependency tree, then pin the patch in a staging branch:
npm ls @langchain/langgraph @langchain/langgraph-checkpoint @langchain/core zod
npm install --save-exact @langchain/langgraph@1.4.19Use the equivalent commands for your existing package manager. Review the lockfile and peer requirements: @langchain/core ^1.1.48 and zod ^3.25.32 || ^4.2.0. The manifest also declares @langchain/langgraph-sdk ~1.12.1. Run the application’s relevant checks without simultaneously changing node names, state schema or business routing.
Four acceptance checks before rollout
The checks below are proposed staging work, not tests performed by RohitAI. Use deterministic synthetic inputs, fresh fixtures for separate scenarios and the checkpoint modes your application actually uses.
Read both nested state and history. Adapt the upstream delta-channel fixture: write the same sentinel to a delta array and an ordinary reducer array, then pause before the next child node. Inspect the child through
getState(config, { subgraphs: true })and iterate itsgetStateHistorywithfor awaitusing the returned child config. Assert expected values and checkpoint identity. Select the intended task by name or identity, not blindly by array position.Confirm an edit survives and is consumed. Obtain the child task config from the parent snapshot and apply a recognizable edit with
updateState. Read the child again, then separately verify that continuation uses the edited state. The upstream update assertions check retention under both default and true modes. Account for reducers: an edit can append rather than replace. Use returned configs instead of manually rewriting namespace strings.Distinguish replay from resume. Follow the pinned replay regression: while interrupted, capture the child config through
getState(config, { subgraphs: true }). Replay withgraph.invoke(null, subConfig); a prompt is expected. Then invokenew Command({ resume: "staging-answer" })with that same config. Require answer retention and downstream progress without the erroneous repeated prompt. Keep an ordinary parent-thread resume case as a control.Resume a thread created before the upgrade. Use sanitized staging checkpoints from the existing deployment, including paused approvals. Repeat with a recreated process and the real persistent saver. MemorySaver holds checkpoints in process memory, so an in-memory fixture cannot establish restart recovery.
The replay regression covers default and true children using a checkpoint captured during an interrupt. It does not establish arbitrary historical stepping inside a completed default subgraph. Time travel deliberately re-executes later nodes and interrupts; the acceptance criterion is that the new answer is used, not that replay never prompts.
Roll out against saved threads, not only new runs
LangGraph runs newly deployed graph code against existing saved threads. Preserve a rollback build and checkpoint-store backup, then canary representative paused workflows. Watch for discarded edits, unexpected repeated prompts, missing-context errors and state-read latency. The PR author’s call-count experiment reports additional history lookup work for affected reads; it is not a production performance guarantee.
Stub external side effects in staging or make them idempotent: resumption can restart the interrupted node. This patch does not guarantee exactly-once external actions. Nor do the release notes promise recovery of historically misaddressed edits; do not assume installing it repairs every old checkpoint.
For teams maintaining multiple agent frameworks, the Pydantic AI streaming-concurrency upgrade guide covers a separate streaming-lifecycle issue and its own upgrade checks.
Methodology: AI-assisted reporting and analysis based on the release, npm metadata, pinned source and upstream regression assertions, checked October 3, 2026. No hands-on runtime tests or benchmarks were performed.
