RuleRegistry contains all planner rules for a given platform. Where a rule is of type {@link cascading.flow.planner.rule.Rule} and allows for either asserts, transforms, and partitioningof pipe assembly process graphs.
Process graphs are initially a standard Pipe assembly and connected Taps. And depending on the underlying platform are partitioned into units of execution along the process hierarchy of {@link cascading.flow.planner.rule.ProcessLevel#Assembly}, {@link cascading.flow.planner.rule.ProcessLevel#Step}, {@link cascading.flow.planner.rule.ProcessLevel#Node}, and {@link cascading.flow.planner.rule.ProcessLevel#Pipeline}.
Where the Assembly is the user created pipe assembly and taps. The Steps are physical jobs executed by a platform. Nodes are internal elements of work within a job (a Mapper or Reducer in the case of MapReduce). And Pipelines, which are non-blocking streamed paths within a node. These can be optional.
Rules rely on a 'language' for sub-graph pattern matching and can be applied against a given process type (Assembly, or Step, etc), to test its correctness, or make changes to the graph. Or they can be used to partition a large graph into a smaller graph, converting an Assembly into Steps.
Debugging rule sets can be done by enabling system properties, see {@link cascading.flow.planner.FlowPlanner}.
The {@link cascading.flow.planner.rule.RuleExec} class is responsible for executing on a given rule set.