yup, that's correct. Once the graph finishes, we lose all references to the GraphResults object, and all the intermediate deferreds will get cleaned out by the garbage collector. I don't think the memory situation is any different than the case where a node throws an error, and a bunch of nodes never run?

re: how the wiring works. I basically think of Shepherd like a plinko machine, where results propagate down thru the graph.

The thunk creates a situation where you've got a self-contained box in the plinko machine, and the top of the box has a stopper in it (preventing anything from getting inside), and evaluating the thunk removes the stopper.