We favor rooting arrows in the node that initiates a relationship even when the flow of information is towards the initiator. We say information is either pushed or pulled over a connection. Push and pull are reciprocal relations.
forward
push - pull
send - receive
originate - answer
source - sink
reverse
read - write
get - put
first - next
manager - managed
up - down
.
We consider how we might cooperate with the Graphviz dot layout mechanism such that information flows top to bottom even while respecting our preferred arrowhead orientation.
Our strategy is to recognize relation types where the flow runs towards the initiator, reverse the from-to order, and then counter-reverse the arrowhead drawn. graphviz
if (['pull','read','get',⋯].includes(rel.type)) return `${rel.to}->${rel.from} [dir=back]` else return `${rel.from}->${rel.to}`
Next we consider how to write as an edge type customization that can be applied at will. Maybe a new category flow, or maybe a variation on emphasis dir=back.
flow
Web Programming get: reverse read: reverse write: forward
Feature: this could cancel defaults.
emphasis
Web Programming get: dir=reverse read: dir=reverse
Feature: this slips in with other kinds of emphasis.
.