This isn’t a bug, it’s just how LangGraph works. It runs nodes in supersteps (bulk-synchronous style). Since b and c are started in the same step, the engine waits for both to finish before moving on, which is why b2 doesn’t run until after c completes.
If you want b → b2 to continue right away (without waiting on c), you’ve got two options:
Put b and b2 in a subgraph and run that in parallel with c. Inside the subgraph, b → b2 will run sequentially on its own.
Or use the Command API (Command(goto="b_2")) so b explicitly triggers b2.
Both approaches avoid the global step barrier that’s currently holding things up.