A directed graph drawn as SVG, on the server: the pipelines and datasets that feed each other, and a snapshot's lineage.
Nodes are laid out top to bottom, a row of boxes per level: a node's level
is its longest path from a node with no edge in (such a node itself just
above the first node it points to), and arrows point down. A level holds at
most PER_ROW boxes side by side and wraps onto more rows, so the drawing
is about as wide as a phone and grows downward with the graph's depth. In a
level, nodes are ordered by where the nodes pointing to them are, then as
given, which keeps most arrows short and uncrossed. Each node is a box with a
label, a second line, a kind (dataset, pipeline or snapshot, which
the stylesheet shapes) and optionally a link and a class, such as start
for the snapshot a lineage page is about. Edges that close a cycle
(a pipeline that reads the dataset it writes, back_edges) are drawn round
the right-hand side, back up, and don't move a node down.