Direction in Reciprocal Relations

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.

.