Though a seemingly simple request, I find it impossible(?) to do without some serious tweaks (automated post-processing).
[splines=ortho seems the obvious solution, but ortho and ports do not play nicely (e.g spline = ortho produces unexpected output with ports (#1415) · Issues · graphviz / graphviz · GitLab)]
Here is a “pretty close” result, but it is missing arrowheads. When (if) I get arrowheads to work, I will post more.