Regarding graphviz's "orthogonal" edge routing

Yes, splines=ortho fails miserably if ports are specified (see
spline = ortho produces unexpected output with ports (#1415) · Issues · graphviz / graphviz · GitLab).
splines=ortho does OK if ports are not specified (see below) - node placement usually works but the port chosen by “ortho” is not always “best” and the edge route is sometimes “suboptimal”.
Your input without ports:

digraph{
    splines="ortho"
    rankdir=TB
    node [shape=box]
    a -> b
    a -> c
    b -> c
    b -> d
    c -> d
    c -> e
    d -> a
}

Giving:
alterTest99a