Adovo

Applied AI

A LangGraph stream can finish while its final summary is unread

Verify final transformer output when consuming LangGraph v3 streams through interleave instead of assuming an empty iterator means completion.

October 28, 2026

A service streams an agent run to a user and expects a final summary event. A current LangGraph issue reports that a transformer publishing from finalize() reaches the projection when iterated directly, but GraphRunStream.interleave() returns an empty sequence and leaves that final item unread. The report includes a minimal reproduction for the v3 stream API. An empty interleaved iterator may therefore mean a consumer missed output, not that no output existed.

Reproduce the consumer path

Use the same graph, transformer, and stream-consumption method as production. Write a final marker into a projection during finalize(), then compare direct projection iteration with interleave(). Record the LangGraph version and whether the item remains in the extension channel after interleave returns. Do not infer behavior from a console that uses a different iterator.

Define completion at the application boundary

For any final summary that drives a UI state or downstream action, require an explicit completion marker or persisted result before declaring the run done. If the streaming interface misses the marker, reconcile against a nonstreaming or durable result instead of telling the user the agent had nothing to say. Make the consumer distinguish “stream ended” from “business result confirmed.”

Keep the workaround narrow

The issue concerns v3 projection output produced during transformer finalization and consumed through interleave. It does not demonstrate that ordinary graph state is lost. Until the installed version passes the reproduction, use direct projection iteration for this final output where practical, or deliver the final result from a separate confirmed state. Test ordering and duplicate delivery when changing consumers.

Adovo’s view

A stream is a delivery path, not the outcome itself. If the final artifact matters, make its arrival observable and recoverable. A quiet iterator is not proof that the work had no result.

Continue exploring

Applied AI

LangGraphAgent Workflows

A deferred LangGraph join can run before all branches finish

A deferred join is not a substitute for proving branch completion. Reproduce scheduling behavior and make aggregation safe to rerun.

Read more

Applied AI

LangGraphAI Agents

A resumed agent returns the subgraph’s previous result

A LangGraph subgraph can reuse an earlier result after a static breakpoint in a reported configuration. Prove checkpoint boundaries with a two-pass test.

Read more

Applied AI

AI AgentsOpenAI Agents SDK

An agent handoff fails on a stale specialist name

A model can emit invalid structured handoff arguments and terminate the run. Validate the handoff contract and return a recoverable user path.

Read more
Explore applied AI services →