Agent Frameworks & Harnesses 2026-10-13

Framework Watch: LangGraph 1.2.15 Stops Saving Checkpoints Past a Failed Write and Stops ToolNode Swallowing Human Answers; LangChain Moves 'Mid-Conversation' Support Into Model Profiles

LangGraph 1.2.15, released October 12, is almost entirely persistence and interrupt fixes, several of which silently lost state or skipped human checkpoints. The same day's LangChain releases replace model-name matching with declared capabilities, and let summarization run on a different model.

LangGraph 1.2.15 was published late on October 12, 2026, with fresh checkpoint-sqlite and checkpoint-postgres releases alongside it. Its notes list fifteen fixes and no new features. Several fixed bugs failed quietly, with no error raised. If you run LangGraph agents with durable checkpoints or human-in-the-loop interrupts, read these.

Checkpoints that read back short

Many of the fixes concern DeltaChannel, a channel rebuilt from its writes along the checkpoint chain. PR #9235 explains the risk: "a checkpoint saved without one of them reads back short for good." If saving a delta write failed, for example after a database blip, later checkpoints were saved anyway and the channel lost that write. The PR also found that saves could pick up another checkpoint's writes out of order. In one case a sync run using the default async durability could hang. The PR says a loop of 100 fast steps "hung every time" on a 15-core machine. Now each save waits on its own writes and fails if any of them, or the previous save, failed. Other fixes cover forks, update_state overwrites, cached nodes and replay order for the same channel type.

Human answers that disappeared

PR #9232 fixes a human-in-the-loop bug. interrupt(response_schema=...) validates a person's answer when a graph resumes. That worked inside a graph node, but not when the interrupt ran inside a tool, or inside a subagent called as a tool. There, the validation error reached ToolNode, which assumed the model had passed bad arguments and handed the error back to the model. The PR describes the effect: "The human never sees the error, the model is blamed for it, and the interrupt is no longer pending." A new helper, langgraph.errors.is_invalid_resume(), marks these errors, and ToolNode now re-raises them whatever handle_tool_errors is set to.

PR #9219 fixes a regression dating back to 1.2.0a3. Async astream_events on versions v1 and v2 silently dropped interrupt_before, interrupt_after and control. Static breakpoints never fired, and a drain request did nothing. The PR notes that langgraph-api passes run-level interrupts this way, so server runs using the events stream mode were affected.

LangChain: declare capabilities, don't guess them

  • langchain-core 1.6.10 and langchain-openai 1.7.1 ship PR #41180. Model profiles gain two fields, mid_conversation_system_messages and mid_conversation_tools. Until now ChatAnthropic decided whether to keep a mid-conversation system message by matching model names, which missed Bedrock IDs. The trade-off, as the PR admits, is that "A new model ID now needs a profile entry."
  • langchain 1.4.5 lets SummarizationMiddleware take a separate summarizer: another chat model or any async callable. The agent's own model is still used for its context-window profile.

What remains uncertain. The release notes don't say how many deployments hit the DeltaChannel bugs, and they offer no migration note on whether existing checkpoints written before the fix can have lost writes.

Analysis: The theme is that agent state and human checkpoints are where frameworks fail quietly. Upgrade if you use interrupts inside tools or subagents, or the events stream mode on a server. Then add a test that resumes a tool-level interrupt with a deliberately invalid answer and checks that the interrupt is still pending. The profile change is a smaller signal of the same maturing: capabilities declared in data, not guessed from model names.

LangGraph 1.2.15 (October 12) fixes checkpoints saved past failed DeltaChannel writes, ToolNode turning invalid human resume answers into model errors, and astream_events silently dropping interrupts; LangChain's same-day releases add declared mid-conversation capability fields to model profiles and a pluggable summarizer.