NeoGraph 0.10.0
A C++17 Graph Agent Engine Library — LangGraph for C++
Loading...
Searching...
No Matches
scheduler.h File Reference

Pure routing / next-step-planning logic extracted from GraphEngine. More...

#include <neograph/api.h>
#include <neograph/graph/types.h>
#include <map>
#include <optional>
#include <set>
#include <vector>
Include dependency graph for scheduler.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  neograph::graph::NextStepPlan
 Plan for the next super-step. More...
 
class  neograph::graph::Scheduler
 Immutable routing oracle for a compiled graph. More...
 
struct  neograph::graph::StepRouting
 Per-node routing signal emitted by this super-step. More...
 

Typedefs

using neograph::graph::BarrierSpecs = std::map< std::string, std::set< std::string > >
 Static barrier declarations extracted at graph-compile time.
 
using neograph::graph::BarrierState = std::map< std::string, std::set< std::string > >
 Per-barrier signal bookkeeping.
 

Detailed Description

Pure routing / next-step-planning logic extracted from GraphEngine.

Scheduler owns the graph topology (edges + conditional edges) and answers two questions:

  1. Given the current state, what are the successors of a given node?
  2. Given the nodes that just ran (and their routing signals), what is the next super-step's ready set?

It has NO knowledge of threading, checkpointing, retries, or HITL — every one of those concerns stays in GraphEngine. The upside is that routing-correctness tests (signal dispatch rules, Command/Send override semantics, END_NODE termination) can be written against Scheduler alone, without spinning up an engine or a graph of real nodes. That matters because the scheduling rules are where the predecessor-map → signal-dispatch refactor lived, and the class of bug we hit today (XOR/AND conflation, dropped siblings) is best caught by pure routing tests rather than by end-to-end runs.

Definition in file scheduler.h.

Typedef Documentation

◆ BarrierSpecs

using neograph::graph::BarrierSpecs = typedef std::map<std::string, std::set<std::string> >

Static barrier declarations extracted at graph-compile time.

Maps barrier node name → set of upstream node names that must ALL signal before the barrier fires. Immutable after construction.

Definition at line 75 of file scheduler.h.

◆ BarrierState

using neograph::graph::BarrierState = typedef std::map<std::string, std::set<std::string> >

Per-barrier signal bookkeeping.

Maps barrier node name → set of upstream node names that have signaled it so far. The caller (engine) owns this map and threads it through successive plan_next_step calls so partial signal counts accumulate across super-steps.

Entries are cleared by the Scheduler when a barrier fires (so the next round of signals starts fresh), and created lazily on first signal.

Definition at line 70 of file scheduler.h.