mirror of
https://github.com/langchain-ai/langgraph.git
synced 2026-08-30 11:49:38 +02:00
The sync stream controller pushed the terminal None sentinel into every subscription queue the instant it saw a root-namespace completed/failed lifecycle event. Any event the server emits after that (e.g. a direct-child subgraph lifecycle/tasks event that feeds thread.subgraphs) was then queued behind the None and never consumed, because iterators return on the first None. This surfaced as thread.subgraphs yielding no direct-child handles for a factory/deep-agent graph on the sync client while the async client worked. Align the sync controller with the async controller: terminate projection iterators when the shared stream ends (or on interrupt, signaled by the thread-stream), not on a mid-stream root-terminal event. Adds a regression test.