Each event travels through a composition following a simple set of rules:
An event travels forward through cables and nodes. Along each cable, it travels from the output port to the input port. Within each node, it travels from the input ports to the output ports (unless it’s blocked). An event never travels backward or skips around.
One event can’t overtake another. If multiple events are traveling through the same cables and nodes, they stay in order.
An event can split. If there are multiple cables coming out of a trigger port or other output ports, then the event travels through each cable simultaneously.
An event can rejoin. If the event has previously split and gone down multiple paths of nodes and cables, and those paths meet with multiple cables going into one node, then the split event rejoins at that node. The node waits for all pieces of the split event to arrive before it executes.
An event can be blocked. If the event hits an event wall or door on an input port, then although it will cause the node to execute, it may not transmit through the node.
An event can travel through each cable at most once. If a composition could allow an event to travel through the same cable more than once, then the composition is not allowed to run. It has an infinite feedback loop error.
Let’s look at how those those rules apply to some actual compositions.