Skip to content

dot — 160 goldens

Hierarchical, layered layout for directed graphs. Each graph below is rendered live in your browser by the library.

rendering…
dot-simple-boxdeterministicSimple 3-node digraph with box nodes and straight edges
DOT source
// @knowvah/dot-engine reference input: 3-node digraph with box nodes and straight edges
// engine: dot
// tolerance: deterministic
digraph G {
    node [shape=box];
    A -> B -> C;
}
rendering…
dot-record-nodedeterministic2-node digraph with a record node having 3 fields
DOT source
// @knowvah/dot-engine reference input: 2-node digraph with a record node
// engine: dot
// tolerance: deterministic
digraph G {
    rec [shape=record label="a|b|c"];
    dest [shape=box];
    rec -> dest;
}
rendering…
dot-html-labeldeterministic2-node digraph with one HTML table label
DOT source
// @knowvah/dot-engine reference input: 2-node digraph with HTML label
// engine: dot
// tolerance: deterministic
digraph G {
    A [label=<<TABLE><TR><TD>A</TD><TD>B</TD></TR></TABLE>>];
    B [shape=box];
    A -> B;
}
rendering…
dot-clusterdeterministic6-node digraph with 2 subgraph clusters
DOT source
// @knowvah/dot-engine reference input: 6-node digraph with 2 subgraph clusters
// engine: dot
// tolerance: deterministic
digraph G {
    subgraph cluster_0 {
        label="Cluster 0";
        A -> B -> C;
    }
    subgraph cluster_1 {
        label="Cluster 1";
        D -> E -> F;
    }
    C -> D;
}
rendering…
dot-cluster-external-edgedeterministicExternal edge into a cluster mid-chain node; pins cluster x-containment (contain_nodes vStart window)
DOT source
digraph G {
  x -> b;
  subgraph cluster_big { p -> q -> r; }
  b -> q;
}
rendering…
dot-nested-clusterdeterministic8-node digraph with a cluster nested inside a cluster
DOT source
// @knowvah/dot-engine reference input: 8-node digraph with a cluster inside a cluster
// engine: dot
// tolerance: deterministic
digraph G {
    subgraph cluster_outer {
        label="Outer";
        subgraph cluster_inner {
            label="Inner";
            A -> B -> C -> D;
        }
        E -> A;
        D -> F;
    }
    G -> E;
    F -> H;
}
rendering…
dot-edge-stylesdeterministic4-node digraph with dashed, dotted, and bold edges
DOT source
// @knowvah/dot-engine reference input: 4-node digraph with dashed, dotted, and bold edges
// engine: dot
// tolerance: deterministic
digraph G {
    A -> B [style=dashed];
    B -> C [style=dotted];
    C -> D [style=bold];
    D -> A [style=solid];
}
rendering…
dot-disconnecteddeterministicTwo separate 3-node digraph components
DOT source
// @knowvah/dot-engine reference input: two separate 3-node digraph components
// engine: dot
// tolerance: deterministic
digraph G {
    A -> B -> C;
    D -> E -> F;
}
rendering…
dot-edge-dirsdeterministic4 edges with dir=forward, back, both, and none
DOT source
// @knowvah/dot-engine reference input: 4 edges with varying dir attributes
// engine: dot
// tolerance: deterministic
digraph G {
    A -> B [dir=forward];
    B -> C [dir=back];
    C -> D [dir=both];
    D -> A [dir=none];
}
rendering…
dot-constraint-falsedeterministic4-node digraph with constraint=false on one edge; ref: graphviz 15.0.0 dot -Kdot -Tsvg; promoted from quarantine (mission 9, post-parity T2 mining)
DOT source
// @knowvah/dot-engine reference input: digraph with constraint=false on one edge
// engine: dot
// tolerance: deterministic
digraph G {
    A -> B;
    A -> C;
    B -> D;
    C -> D [constraint=false];
}
rendering…
dot-self-loopdeterministic3-node digraph with a self-loop on one node; ref: graphviz 15.0.0 dot -Kdot -Tsvg; promoted from quarantine (mission 9, post-parity T2 mining)
DOT source
// @knowvah/dot-engine reference input: 3-node digraph with a self-loop on one node
// engine: dot
// tolerance: deterministic
digraph G {
    A -> A;
    A -> B;
    B -> C;
}
rendering…
dot-minlendeterministic3-node digraph with minlen=2 on one edge; ref: graphviz 15.0.0 dot -Kdot -Tsvg; promoted from quarantine (mission 9, post-parity T2 mining)
DOT source
// @knowvah/dot-engine reference input: digraph with minlen=2 on one edge
// engine: dot
// tolerance: deterministic
digraph G {
    A -> B [minlen=2];
    B -> C;
    A -> C;
}
rendering…
dot-rankdir-lrdeterministic4-node digraph with rankdir=LR; ref: graphviz 15.0.0 dot -Tsvg; promoted from quarantine (mission 9, post-parity T2 mining)
DOT source
// @knowvah/dot-engine reference input: 4-node digraph with rankdir=LR (left to right)
// engine: dot
// tolerance: deterministic
digraph G {
    rankdir=LR;
    A -> B -> C -> D;
}
rendering…
dot-rankdir-btdeterministic4-node digraph with rankdir=BT; ref: graphviz 15.0.0 dot -Tsvg; promoted from quarantine (mission 9, post-parity T2 mining)
DOT source
// @knowvah/dot-engine reference input: 4-node digraph with rankdir=BT (bottom to top)
// engine: dot
// tolerance: deterministic
digraph G {
    rankdir=BT;
    A -> B -> C -> D;
}
rendering…
dot-multi-edgedeterministicdigraph with 3 parallel edges between A and B; ref: graphviz 15.0.0 dot -Tsvg; promoted from quarantine (mission 9, post-parity T2 mining)
DOT source
// @knowvah/dot-engine reference input: digraph with 3 parallel edges between A and B
// engine: dot
// tolerance: deterministic
digraph G {
    A -> B;
    A -> B;
    A -> B;
}
rendering…
dot-rankdir-rldeterministic4-node digraph with rankdir=RL; ref: graphviz 15.0.0 dot -Tsvg; AD3 mission 9
DOT source
// @knowvah/dot-engine reference input: 4-node digraph with rankdir=RL (right to left)
// engine: dot
// tolerance: deterministic
digraph G {
    rankdir=RL;
    A -> B -> C -> D;
}
rendering…
dot-head-tail-labeldeterministicdigraph with headlabel and taillabel on an edge; ref: graphviz 15.0.0 dot -Tsvg; promoted from quarantine (mission 10, post-parity T2 mining)
DOT source
// @knowvah/dot-engine reference input: digraph with headlabel and taillabel on an edge
// engine: dot
// tolerance: deterministic
digraph G {
    A -> B [headlabel="h" taillabel="t"];
    B -> C;
}
rendering…
dot-node-xlabeldeterministicdigraph with a node xlabel; ref: graphviz 15.0.0 dot -Tsvg; mission 11 label parity
DOT source
// @knowvah/dot-engine reference input: digraph with a node xlabel
// engine: dot
// tolerance: deterministic
digraph G { A [xlabel="nx"]; A -> B; }
rendering…
dot-edge-labeldeterministicdigraph with an edge label; ref: graphviz 15.0.0 dot -Tsvg; mission 11 label parity
DOT source
// @knowvah/dot-engine reference input: digraph with an edge label
// engine: dot
// tolerance: deterministic
digraph G { A -> B [label="el"]; }
rendering…
dot-edge-xlabeldeterministicdigraph with an edge xlabel; ref: graphviz 15.0.0 dot -Tsvg; mission 11 label parity
DOT source
// @knowvah/dot-engine reference input: digraph with an edge xlabel
// engine: dot
// tolerance: deterministic
digraph G { A -> B [xlabel="ex"]; }
rendering…
dot-graph-labeldeterministicdigraph with a root graph label; ref: graphviz 15.0.0 dot -Tsvg; mission 11 label parity
DOT source
// @knowvah/dot-engine reference input: digraph with a root graph label
// engine: dot
// tolerance: deterministic
digraph G { label="gl"; A -> B; }
rendering…
dot-labels-combineddeterministicdigraph combining graph, node-xlabel, edge label/xlabel, head/tail labels; ref: graphviz 15.0.0 dot -Tsvg; mission 11 label parity
DOT source
// @knowvah/dot-engine reference input: digraph combining graph, node-xlabel, edge label/xlabel, head/tail labels
// engine: dot
// tolerance: deterministic
digraph G { label="gl"; A [xlabel="nx"]; A -> B [label="el" xlabel="ex" headlabel="hl" taillabel="tl"]; }
rendering…
dot-html-node-labeldeterministicnode html main label, bold (first golden for the live node-html path); ref: graphviz 15.0.0 dot -Tsvg; mission 12 html-label parity
DOT source
// @knowvah/dot-engine reference input: node html main label, bold (first golden for the live node-html path)
// engine: dot
// tolerance: deterministic
digraph G { A [label=<<b>hi</b>>]; }
rendering…
dot-html-node-xlabeldeterministicnode html xlabel, bold; ref: graphviz 15.0.0 dot -Tsvg; mission 12 html-label parity
DOT source
// @knowvah/dot-engine reference input: node html xlabel, bold
// engine: dot
// tolerance: deterministic
digraph G { A [xlabel=<<b>nx</b>>]; A -> B; }
rendering…
dot-html-edge-labeldeterministicedge html label, bold; ref: graphviz 15.0.0 dot -Tsvg; mission 12 html-label parity
DOT source
// @knowvah/dot-engine reference input: edge html label, bold
// engine: dot
// tolerance: deterministic
digraph G { A -> B [label=<<b>el</b>>]; }
rendering…
dot-html-edge-xlabeldeterministicedge html xlabel, bold; ref: graphviz 15.0.0 dot -Tsvg; mission 12 html-label parity
DOT source
// @knowvah/dot-engine reference input: edge html xlabel, bold
// engine: dot
// tolerance: deterministic
digraph G { A -> B [xlabel=<<b>ex</b>>]; }
rendering…
dot-html-head-tail-labeldeterministicedge html head/tail labels, bold + italic; ref: graphviz 15.0.0 dot -Tsvg; mission 12 html-label parity
DOT source
// @knowvah/dot-engine reference input: edge html head/tail labels, bold + italic
// engine: dot
// tolerance: deterministic
digraph G { A -> B [headlabel=<<b>hl</b>> taillabel=<<i>tl</i>>]; }
rendering…
dot-html-graph-labeldeterministicroot graph html label, bold; ref: graphviz 15.0.0 dot -Tsvg; mission 12 html-label parity
DOT source
// @knowvah/dot-engine reference input: root graph html label, bold
// engine: dot
// tolerance: deterministic
digraph G { label=<<b>gl</b>>; A -> B; }
rendering…
dot-html-cluster-labeldeterministiccluster html label, bold; ref: graphviz 15.0.0 dot -Tsvg; mission 12 html-label parity
DOT source
// @knowvah/dot-engine reference input: cluster html label, bold
// engine: dot
// tolerance: deterministic
digraph G { subgraph cluster_0 { label=<<b>cl</b>>; A; } A -> B; }
rendering…
dot-html-fontsdeterministichtml font nesting: b/i/u/s/color, nested b+i, multi-line; ref: graphviz 15.0.0 dot -Tsvg; mission 12 html-label parity
DOT source
// @knowvah/dot-engine reference input: html font nesting: b/i/u/s/color, nested b+i, multi-line
// engine: dot
// tolerance: deterministic
digraph G { A [label=<<b>b</b><i>i</i><u>u</u><s>s</s><font color="red">red</font>>]; B [label=<<b><i>bi</i></b><br/><u>line2</u>>]; A -> B; }
rendering…
dot-html-table-stylingdeterministichtml table styling: bgcolor, cellborder=2, vr, sides, hr, colspan; ref: graphviz 15.0.0 dot -Tsvg; mission 12 html-label parity
DOT source
// @knowvah/dot-engine reference input: html table styling: bgcolor, cellborder=2, vr, sides, hr, colspan
// engine: dot
// tolerance: deterministic
digraph G { A [label=<<TABLE BGCOLOR="lightyellow" CELLBORDER="2"><TR><TD BGCOLOR="lightblue">a</TD><VR/><TD SIDES="LT">b</TD></TR><HR/><TR><TD COLSPAN="2">c</TD></TR></TABLE>>]; }
rendering…
dot-html-combineddeterministiccombined: graph+cluster html labels, decorated table with anchor, edge label/head/tail, node xlabel; ref: graphviz 15.0.0 dot -Tsvg; mission 12 html-label parity
DOT source
// @knowvah/dot-engine reference input: combined: graph+cluster html labels, decorated table with anchor, edge label/head/tail, node xlabel
// engine: dot
// tolerance: deterministic
digraph G { label=<gl>; subgraph cluster_0 { label=<cl>; A [label=<<TABLE BGCOLOR="lightyellow"><TR><TD BGCOLOR="lightblue" HREF="http://x">a</TD><VR/><TD SIDES="LT">b</TD></TR><HR/><TR><TD COLSPAN="2">c</TD></TR></TABLE>>]; } A -> B [label=<el> headlabel=<hl> taillabel=<tl>]; B [xlabel=<nx>]; }
rendering…
dot-node-fillcolordeterministicfilled node with explicit fillcolor (ellipse); ref: graphviz 15.0.0 dot -Tsvg; mission render-styling
DOT source
// @knowvah/dot-engine reference input: filled node with explicit fillcolor (ellipse)
// engine: dot
// tolerance: deterministic
digraph G {
    a [style=filled, fillcolor=lightblue];
}
rendering…
dot-node-pencolordeterministicnode with a non-default pen color; ref: graphviz 15.0.0 dot -Tsvg; mission render-styling
DOT source
// @knowvah/dot-engine reference input: node with a non-default pen color
// engine: dot
// tolerance: deterministic
digraph G {
    a [color=red];
}
rendering…
dot-node-penwidthdeterministicnode with penwidth=3; ref: graphviz 15.0.0 dot -Tsvg; mission render-styling
DOT source
// @knowvah/dot-engine reference input: node with penwidth=3
// engine: dot
// tolerance: deterministic
digraph G {
    a [penwidth=3];
}
rendering…
dot-node-style-dasheddeterministicnode with dashed boundary; ref: graphviz 15.0.0 dot -Tsvg; mission render-styling
DOT source
// @knowvah/dot-engine reference input: node with dashed boundary
// engine: dot
// tolerance: deterministic
digraph G {
    a [style=dashed];
}
rendering…
dot-node-style-dotteddeterministicnode with dotted boundary; ref: graphviz 15.0.0 dot -Tsvg; mission render-styling
DOT source
// @knowvah/dot-engine reference input: node with dotted boundary
// engine: dot
// tolerance: deterministic
digraph G {
    a [style=dotted];
}
rendering…
dot-node-style-bolddeterministicnode with bold boundary (penwidth 2); ref: graphviz 15.0.0 dot -Tsvg; mission render-styling
DOT source
// @knowvah/dot-engine reference input: node with bold boundary (penwidth 2)
// engine: dot
// tolerance: deterministic
digraph G {
    a [style=bold];
}
rendering…
dot-node-filled-defaultdeterministicfilled node, no fillcolor (default lightgrey); ref: graphviz 15.0.0 dot -Tsvg; mission render-styling
DOT source
// @knowvah/dot-engine reference input: filled node, no fillcolor (default lightgrey)
// engine: dot
// tolerance: deterministic
digraph G {
    a [style=filled];
}
rendering…
dot-edge-colordeterministicedge with a non-default color (path + arrow); ref: graphviz 15.0.0 dot -Tsvg; mission render-styling
DOT source
// @knowvah/dot-engine reference input: edge with a non-default color (path + arrow)
// engine: dot
// tolerance: deterministic
digraph G {
    a -> b [color=red];
}
rendering…
dot-edge-penwidthdeterministicedge with penwidth=2; ref: graphviz 15.0.0 dot -Tsvg; mission render-styling
DOT source
// @knowvah/dot-engine reference input: edge with penwidth=2
// engine: dot
// tolerance: deterministic
digraph G {
    a -> b [penwidth=2];
}
rendering…
dot-edge-style-dasheddeterministicsingle dashed edge; ref: graphviz 15.0.0 dot -Tsvg; mission render-styling
DOT source
// @knowvah/dot-engine reference input: single dashed edge
// engine: dot
// tolerance: deterministic
digraph G {
    a -> b [style=dashed];
}
rendering…
dot-edge-colored-arrowdeterministicdouble-ended edge with colored arrowheads; ref: graphviz 15.0.0 dot -Tsvg; mission render-styling
DOT source
// @knowvah/dot-engine reference input: double-ended edge with colored arrowheads
// engine: dot
// tolerance: deterministic
digraph G {
    a -> b [color="#0000ff", dir=both];
}
rendering…
dot-graph-bgcolordeterministicgraph with a background color; ref: graphviz 15.0.0 dot -Tsvg; mission render-styling
DOT source
// @knowvah/dot-engine reference input: graph with a background color
// engine: dot
// tolerance: deterministic
digraph G {
    bgcolor=lightyellow;
    a;
}
rendering…
dot-cluster-filleddeterministicfilled cluster (color sets fill and pen); ref: graphviz 15.0.0 dot -Tsvg; mission render-styling
DOT source
// @knowvah/dot-engine reference input: filled cluster (color sets fill and pen)
// engine: dot
// tolerance: deterministic
digraph G {
    subgraph cluster_0 {
        style=filled;
        color=lightgrey;
        a;
    }
}
rendering…
dot-cluster-bgcolordeterministiccluster filled via bgcolor backward-compat; ref: graphviz 15.0.0 dot -Tsvg; mission render-styling
DOT source
// @knowvah/dot-engine reference input: cluster filled via bgcolor backward-compat
// engine: dot
// tolerance: deterministic
digraph G {
    subgraph cluster_0 {
        bgcolor=lightpink;
        a;
    }
}
rendering…
dot-styled-combineddeterministicnode fill + node pen + edge color/style + cluster fill + bgcolor together; ref: graphviz 15.0.0 dot -Tsvg; mission render-styling
DOT source
// @knowvah/dot-engine reference input: node fill + node pen + edge color/style + cluster fill + bgcolor together
// engine: dot
// tolerance: deterministic
digraph G {
    bgcolor=azure;
    subgraph cluster_0 {
        style=filled;
        color=lightgrey;
        a [style=filled, fillcolor=lightblue];
        b [color=red];
        a -> b [color=blue, style=dashed];
    }
}
rendering…
mc-node-gradient-lineardeterministicnode linear gradient fill (fillcolor c1:c2); ref: graphviz 15.0.0 dot -Tsvg; mission multicolor-paint
DOT source
// @knowvah/dot-engine reference input: node linear gradient fill (fillcolor c1:c2)
// engine: dot
// tolerance: deterministic
digraph G {
    a [style=filled, fillcolor="red:blue"];
}
rendering…
mc-node-gradient-radialdeterministicnode radial gradient fill (style=radial); ref: graphviz 15.0.0 dot -Tsvg; mission multicolor-paint
DOT source
// @knowvah/dot-engine reference input: node radial gradient fill (style=radial)
// engine: dot
// tolerance: deterministic
digraph G {
    a [style="radial,filled", fillcolor="red:blue"];
}
rendering…
mc-node-gradient-fracdeterministicnode gradient with a color-stop fraction; ref: graphviz 15.0.0 dot -Tsvg; mission multicolor-paint
DOT source
// @knowvah/dot-engine reference input: node gradient with a color-stop fraction
// engine: dot
// tolerance: deterministic
digraph G {
    a [style=filled, fillcolor="red;0.3:blue"];
}
rendering…
mc-node-gradient-angledeterministicnode linear gradient with gradientangle; ref: graphviz 15.0.0 dot -Tsvg; mission multicolor-paint
DOT source
// @knowvah/dot-engine reference input: node linear gradient with gradientangle
// engine: dot
// tolerance: deterministic
digraph G {
    a [style=filled, fillcolor="red:blue", gradientangle=90];
}
rendering…
mc-node-box-gradientdeterministicbox-node linear gradient fill; ref: graphviz 15.0.0 dot -Tsvg; mission multicolor-paint
DOT source
// @knowvah/dot-engine reference input: box-node linear gradient fill
// engine: dot
// tolerance: deterministic
digraph G {
    a [shape=box, style=filled, fillcolor="red:blue"];
}
rendering…
mc-cluster-gradientdeterministiccluster linear gradient fill; ref: graphviz 15.0.0 dot -Tsvg; mission multicolor-paint
DOT source
// @knowvah/dot-engine reference input: cluster linear gradient fill
// engine: dot
// tolerance: deterministic
digraph G {
    subgraph cluster_0 {
        style=filled;
        fillcolor="lightgrey:white";
        a;
    }
}
rendering…
mc-graph-bgcolor-gradientdeterministicgraph background linear gradient; ref: graphviz 15.0.0 dot -Tsvg; mission multicolor-paint
DOT source
// @knowvah/dot-engine reference input: graph background linear gradient
// engine: dot
// tolerance: deterministic
digraph G {
    bgcolor="lightyellow:lightblue";
    a;
}
rendering…
mc-node-stripeddeterministicstriped box node, three colors; ref: graphviz 15.0.0 dot -Tsvg; mission multicolor-paint
DOT source
// @knowvah/dot-engine reference input: striped box node, three colors
// engine: dot
// tolerance: deterministic
digraph G {
    a [shape=box, style=striped, fillcolor="red:green:blue"];
}
rendering…
mc-node-striped-weighteddeterministicstriped box node with weighted bands; ref: graphviz 15.0.0 dot -Tsvg; mission multicolor-paint
DOT source
// @knowvah/dot-engine reference input: striped box node with weighted bands
// engine: dot
// tolerance: deterministic
digraph G {
    a [shape=box, style=striped, fillcolor="red;0.25:green;0.25:blue"];
}
rendering…
mc-edge-multicolordeterministicdirected two-color parallel edge; ref: graphviz 15.0.0 dot -Tsvg; mission multicolor-paint
DOT source
// @knowvah/dot-engine reference input: directed two-color parallel edge
// engine: dot
// tolerance: deterministic
digraph G {
    a -> b [color="red:blue"];
}
rendering…
mc-edge-multicolor-3deterministicdirected three-color parallel edge; ref: graphviz 15.0.0 dot -Tsvg; mission multicolor-paint
DOT source
// @knowvah/dot-engine reference input: directed three-color parallel edge
// engine: dot
// tolerance: deterministic
digraph G {
    a -> b [color="red:green:blue"];
}
rendering…
mc-combineddeterministicgradient node + striped node + gradient cluster bg + multicolor edge; ref: graphviz 15.0.0 dot -Tsvg; mission multicolor-paint
DOT source
// @knowvah/dot-engine reference input: gradient node + striped node + gradient cluster bg + multicolor edge
// engine: dot
// tolerance: deterministic
digraph G {
    bgcolor="lightcyan:white";
    a [style=filled, fillcolor="red:blue"];
    c [style=filled, fillcolor="green:yellow"];
    b [shape=box, style=striped, fillcolor="orange:purple"];
    a -> c [color="red:blue"];
}
rendering…
dot-edge-multicolor-semideterministictwo-color split-along-length edge (semicolon); ref: graphviz 15.0.0 dot -Tsvg; follow-up edge-multicolor-semicolon
DOT source
// @knowvah/dot-engine reference input: two-color split-along-length edge (semicolon)
// engine: dot
// tolerance: deterministic
digraph G {
    a -> b [color="red;0.5:blue"];
}
rendering…
dot-edge-multicolor-semi-3deterministicthree-color split-along-length edge; ref: graphviz 15.0.0 dot -Tsvg; follow-up edge-multicolor-semicolon
DOT source
// @knowvah/dot-engine reference input: three-color split-along-length edge
// engine: dot
// tolerance: deterministic
digraph G {
    a -> b [color="red;0.3:green;0.3:blue"];
}
rendering…
dot-undirected-simpledeterministicundirected graph, single edge (no arrowhead); ref: graphviz 15.0.0 dot -Tsvg; fix undirected-edge-clip
DOT source
// @knowvah/dot-engine reference input: undirected graph, single edge (no arrowhead)
// engine: dot
// tolerance: deterministic
graph G {
    a -- b;
}
rendering…
dot-undirected-treedeterministicundirected graph, small tree; ref: graphviz 15.0.0 dot -Tsvg; fix undirected-edge-clip
DOT source
// @knowvah/dot-engine reference input: undirected graph, small tree
// engine: dot
// tolerance: deterministic
graph G {
    a -- b;
    a -- c;
    b -- d;
}
rendering…
dot-undirected-multirankdeterministicundirected edge spanning two ranks (curves around); ref: graphviz 15.0.0 dot -Tsvg; fix undirected-edge-clip
DOT source
// @knowvah/dot-engine reference input: undirected edge spanning two ranks (curves around)
// engine: dot
// tolerance: deterministic
graph G {
    a -- b;
    a -- c;
    b -- c;
}
rendering…
dot-node-penwidth-edge-clipdeterministicedge into a thick-bordered (penwidth=2) node clips to the outline; ref: graphviz 15.0.0 dot -Tsvg; fix node-penwidth-edge-clip
DOT source
// @knowvah/dot-engine reference input: edge into a thick-bordered (penwidth=2) node clips to the outline
// engine: dot
// tolerance: deterministic
digraph G {
    a -> b;
    b [shape=box, penwidth=2];
}
rendering…
dot-port-compass-alignediterativealigned compass ports A:s->B:n via faithful routesplines (steering-port SR8; cleared parity T8's 11pt unclipped-port blocker); title carries ports + &#45; hyphen; ref: graphviz 15.0.0 dot -Tsvg; drift pinned by portReference at 0.01pt
DOT source
digraph{A:s->B:n}
rendering…
dot-port-steering-eastdeterministiceast lateral steering port A:e->B (tail exits the right face, bulges then descends); port conformant to graphviz 15.0.0 dot -Tsvg after the compass-port ictxt fix (drift-pin retired)
DOT source
digraph{A:e->B}
rendering…
dot-port-steering-westdeterministicwest lateral steering port A:w->B (tail exits the left face, bulges then descends); port conformant to graphviz 15.0.0 dot -Tsvg after the compass-port ictxt fix (drift-pin retired)
DOT source
digraph{A:w->B}
rendering…
dot-port-record-alignediterativerecord-field port A:f0->B via faithful routesplines (SR8); title carries the field name A:f0->B; ref: graphviz 15.0.0 dot -Tsvg; drift pinned by portReference at 0.01pt
DOT source
digraph{A[shape=record,label="<f0>a|<f1>b"];A:f0->B}
rendering…
dot-ortho-chaindeterministicsplines=ortho 3-node linear chain (single vertical corridor); ref: native C dot -Tsvg via gvmine
DOT source
digraph { splines=ortho; a -> b -> c; }
rendering…
dot-ortho-branchdeterministicsplines=ortho branch (a->b, a->c); channel split / track separation; ref: native C dot -Tsvg via gvmine
DOT source
digraph { splines=ortho; a -> b; a -> c; }
rendering…
dot-ortho-multirankdeterministicsplines=ortho 4-rank chain with a->d skip edge (virtual-node corridor); ref: native C dot -Tsvg via gvmine
DOT source
digraph { splines=ortho; a -> b -> c -> d; a -> d; }
rendering…
dot-ortho-labeldeterministicsplines=ortho edge with a label; C positions the label, edge crosses it (no routing around); ref: native C dot -Tsvg via gvmine
DOT source
digraph { splines=ortho; a -> b [label="x"]; }
rendering…
dot-curved-singledeterministicsplines=curved single edge a->b; bent toward cycle centroid (here on-axis → straight); ref: native C dot -Tsvg via gvmine
DOT source
digraph { splines=curved; a -> b; }
rendering…
dot-curved-paralleldeterministicsplines=curved 3 parallel a->b; control points spread along the perpendicular (routespl.c:1000-1014); ref: native C dot -Tsvg via gvmine
DOT source
digraph { splines=curved; a -> b; a -> b; a -> b; }
rendering…
dot-compound-splinesdeterministicsplines=compound; a->b->c routes as a normal spline (EDGETYPE_COMPOUND no special branch); ref: native C dot -Tsvg via gvmine
DOT source
digraph { splines=compound; a -> b -> c; }
rendering…
dot-curved-cycledeterministicsplines=curved 2-cycle a->b->a; one cnt=2 group, perp-spread clipped + back-edge swap; ref: native C dot -Tsvg via gvmine
DOT source
digraph { splines=curved; a -> b; b -> a; }
rendering…
dot-compound-lheaddeterministiccompound=true; a->b with lhead/ltail clipping splines + arrowheads to cluster bboxes (compound.c makeCompoundEdge + arrowEndClip); ref: native C dot -Tsvg via gvmine
DOT source
digraph {
  compound=true;
  subgraph clusterA { label="A"; a; }
  subgraph clusterB { label="B"; b; }
  a -> b [lhead=clusterB, ltail=clusterA];
}
rendering…
dot-long-edge-straightdeterministicstraight-mode segmentation: a->f spans 5 ranks over a collinear vnode run >= threshold, split into spline-top + straight-middle + spline-bottom (make_regular_edge smode); ref: native C dot -Tsvg
DOT source
digraph G { a->b->c->d->e->f; a->f; }
rendering…
dot-long-edge-p2deterministiccorpus winner p2.gv (kernel--runmem long edge): smode corridor-hugging segmentation; all 37 edge paths conformant with the oracle; ref: native C dot -Tsvg
DOT source
graph G {
	run -- intr;
	intr -- runbl;
	runbl -- run;
	run -- runmem;
	/* run -- kernel; */
	kernel -- zombie;
	kernel -- sleep;
	kernel -- runmem;
	sleep -- swap;
	swap -- runswap;
	runswap -- new;
	runswap -- runmem;
	new -- runmem;
	sleep -- runmem;
}
rendering…
dot-long-edge-polylinedeterministicsplines=polyline long edge (a->f over 5 ranks): straight-mode segmentation routes each piece via routepolylines (make_regular_edge !is_spline branch); conforms to the oracle, locking polyline smode (AD-3 follow-up)
DOT source
digraph G { graph [splines=polyline]; a->b->c->d->e->f; a->f; }
rendering…
dot-point-shapedeterministicshape=point (point_init/point_gencode port): bare point (DEF_POINT rx 1.8, fill black, no label), sized point (width=0.2 -> rx 7.2), and colored point (color=red fills+strokes red); conforms to the oracle
DOT source
digraph {
  a [shape=point];
  b [shape=point, width=0.2];
  c [shape=point, color=red];
  a -> b -> c;
}
rendering…
dot-rounded-clusters-mrecorddeterministicrounded cluster rendering (round_corners): a rounded,filled cluster (fill #f2f2f2 bezier <path>), a style=rounded cluster (steelblue <path>), and a shape=Mrecord node (rounded <path> outer box + field-divider <polyline>) connected by an edge; conforms to the oracle
DOT source
digraph {
  subgraph cluster_0 {
    style="rounded,filled";
    fillcolor=grey95;
    a [shape=Mrecord, label="x|y"];
  }
  subgraph cluster_1 {
    style=rounded;
    color=steelblue;
    b;
  }
  a -> b;
}
rendering…
dot-record-fill-pendeterministicrecord/Mrecord fill + pen (record_gencode stylenode/penColor/findFill): style=filled record (solid lightyellow polygon), style=filled Mrecord (lightblue rounded <path>), and color=red record (red box + red field divider); conforms to the oracle
DOT source
digraph {
  a [shape=record, style=filled, fillcolor=lightyellow, label="x|y"];
  b [shape=Mrecord, style=filled, fillcolor=lightblue, label="p|q"];
  c [shape=record, color=red, label="m|n"];
  a -> b -> c;
}
rendering…
dot-bgcolor-x11namedeterministicgraph bgcolor with an X11-only color name (lightcyan1) canonicalized to #e0ffff via gvrender_resolve_color in emit_background; conforms to the oracle (parity color-stroke group A)
DOT source
digraph TopLevel {
    bgcolor = lightcyan1
    fontname = Arial
    label = "test.rb"
    fontsize = 8
    node [
        fontname = Arial,
        color = black,
        fontsize = 8
    ]

    subgraph cluster_1 {
        bgcolor = palegreen1
        fontname = Arial
        color = blue
        label = "ModuleName"
        ClassName [
            style = filled,
            URL = "classes/ModuleName/ClassName.html",
            fontcolor = black,
            color = palegoldenrod,
            label = "ClassName"
        ]

    }

}
rendering…
dot-node-setlinewidthdeterministicnode style=setlinewidth(3) sets stroke-width=3 via gvrender_set_style atof of the paren argument; conforms to the oracle (parity color-stroke group B1)
DOT source
digraph {
  node [shape=ellipse, style="setlinewidth(3)"];
  a -> b;
}
rendering…
dot-style-funlimitdeterministicnode style with 65 tokens hits parse_style FUNLIMIT (64) truncation → empty style list → unfilled (fill=none); conforms to the oracle (parity color-stroke group B2)
DOT source
/// Graph with >63 styles, totalling >128 bytes in one attribute. Note that we
/// do not need the styles to be unique for this test case.

digraph {
  a[style="filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled,filled"];
}
rendering…
dot-edge-fontcolor-schemedeterministicedge label fontcolor numeric index (fontcolor=2 with colorscheme=paired12) resolved against the edge colorscheme window in emit_edge; conforms to the oracle (parity color-stroke group C)
DOT source
strict digraph
{
    a -> b[ colorscheme=x11      fontcolor=red        labelfontcolor=blue      label="label" taillabel="tail" headlabel="head" ];
    c -> d[ colorscheme=svg      fontcolor=blueviolet labelfontcolor=limegreen label="label" taillabel="tail" headlabel="head" ];
    e -> f[ colorscheme=paired12 fontcolor=2          labelfontcolor=10        label="label" taillabel="tail" headlabel="head" ];

    a [ label="colorscheme=x11" ];
    b [ label="colorscheme=x11" ];

    c [ label="colorscheme=svg" ];
    d [ label="colorscheme=svg" ];
    
    e [ label="colorscheme=paired12" ];
    f [ label="colorscheme=paired12" ];
}
rendering…
dot-cluster-peripheries0deterministiccluster peripheries=0 suppresses the boundary stroke (pencolor transparent → stroke none) per emit_clusters; conforms to the oracle (parity color-stroke group D)
DOT source
digraph G {
  subgraph cluster0 {
    fillcolor="blue:red"
	style="filled,rounded"
    0
  }
  subgraph cluster1 {
    peripheries=0
    fillcolor="blue:red"
	style=filled
    1
  }
  subgraph cluster2 {
    fillcolor="blue"
	style=filled
    2
  }
  subgraph cluster3 {
    peripheries=0
    fillcolor="red"
	style="filled,rounded"
    3
  }
  subgraph cluster4 {
    peripheries=0
    bgcolor="red:blue"
    4
  }
  subgraph cluster5 {
    bgcolor="red:blue"
    5
  }
  0 -> 1 -> 2 -> 3 -> 4
}
rendering…
dot-label-xml-entitydeterministiclabel XML-entity decode (htmlEntityUTF8: &lt;/&gt;/&amp;/&#65;) + textspan escaping flags {raw,dash,nbsp} (apostrophe→&#39;, dash→&#45;); fixedsize pins geometry; conforms to the oracle (parity text-content group b81/1990)
DOT source
digraph {
  node [shape=box, fixedsize=true, width=3, height=1];
  a [label="&lt;tag&gt; &amp; &#65;"];
  a -> b [label="O'Brien-Smith"];
}
rendering…
dot-string-no-concatdeterministicadjacent quoted strings are NOT implicitly concatenated (QAtom: only '+' concatenates) — "a" "b" yields two nodes; conforms to the oracle (parity parser-gap 2682/1990)
DOT source
digraph { "a" "b"; "a" -> "c"; }
rendering…
dot-cluster-id-attrdeterministiccluster SVG id from the DOT `id` attribute (getObjId step 2); conforms to the oracle (parity attr-or-tag 2497)
DOT source
digraph "MODEL" {

subgraph cluster_0_0 {
id=cluster_0_0;
color="transparent";
cluster_0_0[style=invis, shape=point, penwidth=0, peripheries=0, height=0, margin=0];

"50331650"[color="#55A3F3" width=0.0 height=0 tooltip="" label=<<table BORDER="0" CELLBORDER="0" CELLPADDING="4" CELLSPACING="2"><tr><td></td><td>50331650</td><td WIDTH="1px"></td></tr></table>>];
    
}

subgraph cluster_1_0 {
id=cluster_1_0;
color="transparent";
cluster_1_0[style=invis, shape=point, penwidth=0, peripheries=0, height=0, margin=0];

"67108871"[color="#39A9AA" width=0.0 height=0 tooltip="" label=<<table BORDER="0" CELLBORDER="0" CELLPADDING="4" CELLSPACING="2"><tr><td></td><td>67108871</td><td WIDTH="1px"></td></tr></table>>];
}
                         
}
rendering…
dot-node-class-attrdeterministicDOT `class` attr (node default) appended to the SVG class string (svg_print_id_class → class="node node"); conforms to the oracle (parity attr-or-tag 2563)
DOT source
graph "test_graph" {
  overlap="scale"
  node[class="node", shape="ellipse", width="1", height="1", fixedsize="true"];
  edge[class="edge"];
  "node_0" -- "node_1"
  "node_0" -- "node_2"
  "node_0" -- "node_3"
} 
rendering…
dot-id-stylesheetdeterministicgraph/node/edge `id` attr + `<gid>_` prefix on objects without an id (getObjId) and the `<?xml-stylesheet?>` PI for `stylesheet=`; conforms to the oracle (parity attr-or-tag 2184/2258/triedds/2183)
DOT source
digraph G {
  id="G";
  stylesheet="theme.css";
  a [id="myA"];
  b;
  subgraph cluster1 { id="myclust"; c -> d; }
  a -> b [id="myedge"];
}
rendering…
dot-unicode-namedeterministicnon-Latin (Cyrillic) node names parse via the widened NAME char class (\x80–\uFFFF, matching scan.l's byte>=0x80); fixedsize pins geometry; conforms to the oracle (parity parser-gap graphs-russian)
DOT source
digraph {
  node [shape=box, fixedsize=true, width=2, height=0.8];
  "Контрагенты" -> "Банк";
}
rendering…
dot-arrow-dotdeterministicdir=both odot head + dot tail → two <ellipse> arrows (filled tail, open head); conforms to the oracle (arrowhead-geometry G1)
DOT source
digraph{a->b[arrowhead=odot,arrowtail=dot,dir=both]}
rendering…
dot-arrow-crowdeterministicdir=both crow head + vee tail → 9-point arrow polygons; conforms to the oracle (arrowhead-geometry G2)
DOT source
digraph{a->b[arrowhead=crow,arrowtail=vee,dir=both]}
rendering…
dot-arrow-boxdeterministicdir=both box head + obox tail → polygon(4)+polyline, filled vs open; conforms to the oracle
DOT source
digraph{a->b[arrowhead=box,arrowtail=obox,dir=both]}
rendering…
dot-arrow-diamonddeterministicdir=both diamond head + ediamond (open) tail → 4-point polygons; conforms to the oracle
DOT source
digraph{a->b[arrowhead=diamond,arrowtail=ediamond,dir=both]}
rendering…
dot-arrow-teedeterministicdir=both tee arrows → polygon(4)+polyline bar; conforms to the oracle
DOT source
digraph{a->b[arrowhead=tee,arrowtail=tee,dir=both]}
rendering…
dot-arrow-curvedeterministicdir=both curve head + icurve tail → polyline shaft + concave Bézier <path>; conforms to the oracle
DOT source
digraph{a->b[arrowhead=curve,arrowtail=icurve,dir=both]}
rendering…
dot-arrow-compounddeterministicdir=both crowdot head + odotnormal tail → stacked compound arrows (polygon+ellipse) offset along the shaft; conforms to the oracle
DOT source
digraph{a->b[arrowhead=crowdot,arrowtail=odotnormal,dir=both]}
rendering…
dot-arrow-sidedeterministicdir=both lnormal head + rdiamond tail → side-modifier half arrows; conforms to the oracle
DOT source
digraph{a->b[arrowhead=lnormal,arrowtail=rdiamond,dir=both]}
rendering…
dot-htmltable-grad-lineardeterministicHTML table with a table-level linear gradient bgcolor (gradientangle=315) plus per-cell linear gradients (setFill GRADIENT path); conforms to the oracle
DOT source
digraph G {
  a [shape=plaintext label=<
    <TABLE BGCOLOR="yellow:violet" gradientangle="315">
      <TR><TD>00</TD><TD BGCOLOR="green:blue">01</TD></TR>
      <TR><TD BGCOLOR="orange:red">10</TD><TD>11</TD></TR>
    </TABLE>>];
}
rendering…
dot-htmltable-grad-radialdeterministicHTML table cell with a radial gradient bgcolor (STYLE=radial → setFill RGRADIENT path); conforms to the oracle
DOT source
digraph G {
  a [shape=plaintext label=<
    <TABLE>
      <TR><TD BGCOLOR="yellow:violet" STYLE="radial">00</TD><TD>01</TD></TR>
    </TABLE>>];
}
rendering…
dot-htmltable-rounded-graddeterministicstyle=rounded HTML table with a linear gradient bgcolor (gradientangle=315) and border=3 cells: table fill + border emit rounded Bezier <path>s, the bgcolor fills carry the leaked border pen width as stroke-width; conforms to the oracle
DOT source
digraph G {
  a [shape=plaintext label=<
    <TABLE style="rounded" BGCOLOR="yellow:violet" gradientangle="315" border="6">
      <TR><TD border="3" BGCOLOR="green:blue">00</TD><TD border="3" BGCOLOR="orange">01</TD></TR>
    </TABLE>>];
}
rendering…
dot-label-blank-linesdeterministicGraph label with leading blank lines: blank spans emit no <text> element (gvrender_textspan skips empty strings) while still reserving vertical space
DOT source
digraph { label="\n\ntwo blank lines above\nsecond line"; a -> b; }
rendering…
dot-size-scalingdeterministicsize=1,1 on a wider drawing: init_job_viewport zoom Z<1 fits it; the SVG group carries scale(Z) and the width/height/viewBox are size-fitted while node/edge coordinates stay full-size (D4)
DOT source
// @knowvah/dot-engine reference input: size= drawing scaling (init_job_viewport zoom)
// engine: dot
// tolerance: deterministic
// A drawing wider than size=1,1 (72pt): zoom Z < 1 shrinks it to fit. The SVG
// group carries scale(Z); node/edge coordinates stay full-size.
digraph G {
    size="1,1";
    rankdir=LR;
    a -> b -> c -> d;
    a -> d;
}
rendering…
dot-long-edge-orderdeterministicrankdir=LR chain with overlapping long spans; n12->n14 corridor depends on routing order (dot_splines_ rank-major + edgecmp). Routing edges in C order gives its bent 2-cubic spline; nodes.values() order collapsed it to 1 cubic (T2).
DOT source
digraph { rankdir=LR;
  n0->n1;
  n1->n2;
  n2->n3;
  n3->n4;
  n4->n5;
  n5->n6;
  n6->n7;
  n7->n8;
  n8->n9;
  n9->n10;
  n10->n11;
  n11->n12;
  n12->n13;
  n13->n14;
  n14->n15;
  n0->n15; n0->n12; n2->n14; n1->n13;
  n0->n2;
  n2->n4;
  n4->n6;
  n6->n8;
  n8->n10;
  n10->n12;
  n12->n14;
}
rendering…
concentrate-b135deterministicconcentrate=true merges anti-parallel A->B / B->A into one edge that must draw an arrowhead at BOTH ends (conc_opp_flag OR's the opposing edge's arrowhead in arrow_flags); the second arrowhead also clips the spline at the tail end (@see lib/common/arrows.c:arrow_flags)
DOT source
digraph ID {
graph [
        concentrate = true
      ];
A -> B
B -> A
}

rendering…
concentrate-167deterministicconcentrate=true with a multi-edge fan and a back edge b->a; the surviving concentrated edge carries conc_opp_flag and draws both arrowheads (second confirming case for the conc_opp_flag branch)
DOT source
digraph G {
 concentrate=true;
  a -> 4 -> b
  a -> b
  a -> b
  b -> a
}

rendering…
parallel-multirank-mindeterministicminimal repro for the T1.2 representative-resolution fix: 3 parallel edges a->b spanning 2 ranks (a->m->b forces b to rank 2). Pre-fix the group's shared base routed the first virtual segment (a->vnode) and each copy ended at the rank-1 virtual node; post-fix each routes through the corridor to b. Cluster-free to isolate the parallel-routing fix from the separate adjacent cluster-exit over-segmentation; the cluster case is covered by parallel-cluster-ldbxtried
DOT source
digraph {
  node [shape=box width=0.5];
  a -> b;
  a -> b;
  a -> b;
  a -> m -> b;
}
rendering…
edge-order-mindeterministicedgecmp-order fixture (fix-edge-route-order): lone a->b (|rank diff|=1) dispatches BEFORE the parallel multi-rank a->c group (cnt=2) that recover_slack-moves their shared rank-1 vnode. Byte-matches the headless oracle both pre- and post-T1.2 (the move here is sub-pixel and a->b is straight in C either way), so it guards the unified single-pass router against breaking simple lone-before-group cases. The motivating geometric divergence (n0->n1 under-segmentation) only manifests at ldbxtried scale; that is pinned by the focused 'ldbxtried n0->n1 corridor' test.
DOT source
// Minimal edgecmp-order fixture: lone a->b (|rank diff|=1) dispatches BEFORE the
// parallel multi-rank a->c group (cnt=2) that recover_slack-moves their shared
// rank-1 vnode. Pins that the unified single-pass router routes the lone edge in
// its edgecmp position and does not break simple lone-before-group cases.
// @see plans/fix-edge-route-order/comparisons/c-order-oracle.md
digraph { a -> b; a -> c; a -> c; m1 -> m2; m2 -> c; b -> c; }
rendering…
parallel-cluster-ldbxtrieddeterministicFull ldbxtried (clustered 'toucan' graph), an active whole-SVG conformance gate. The fix-ldbxtried mission corrected interclexp's edge-iteration order (g.edges insertion order -> C agfstedge order), which restored the merged ED_xpenalty on parallel intercluster multi-edges (n488->n2: 1->2), fixed rcross(rank3) (17->19) and so the ReMincross best within-rank order, which had cascaded into 13 nodes' X coords plus a rank reorder (n518). Port now structural-matches the headless oracle (/tmp/ghl). Previously skipped as deeply-diverged; that residual WAS this X-coord cascade. The focused 'ldbxtried n0->n1 corridor' test remains a finer pin.
DOT source
digraph g {
graph [
fontsize = "14"
fontname = "Times-Roman"
fontcolor = "black"
color = "black"
];
node [
fontsize = "14"
fontname = "Times-Roman"
fontcolor = "black"
shape = "box"
color = "black"
width = "0.5"
style = "filled"
];
edge [
fontsize = "14"
fontname = "Times-Roman"
fontcolor = "black"
color = "black"
];
"n0" [
label = "18519\n?"
color = "lightblue"
];
"n1" [
label = "4836"
shape = "ellipse"
color = "maroon1"
];
"n2" [
label = "ttyqa"
shape = "ellipse"
color = "maroon1"
];
"n448" [
label = "21079\nlefty"
color = "lightblue"
];
"n449" [
label = "tried.lefty"
shape = "ellipse"
color = "maroon1"
];
"n454" [
fontsize = "7"
label = "bunting\n6000"
shape = "doublecircle"
color = "green"
];
"n460" [
label = ""
shape = "doublecircle"
color = "yellow"
];
"n461" [
label = ""
shape = "doublecircle"
color = "yellow"
];
"n462" [
label = "21084\ntried"
color = "lightblue"
];
"n464" [
label = "21086\nldbx"
color = "lightblue"
];
"n466" [
label = "ldbx"
shape = "ellipse"
color = "maroon1"
];
"n468" [
label = "21087\nlefty"
color = "lightblue"
];
"n469" [
label = "sh21086.1"
shape = "ellipse"
color = "maroon1"
];
"n474" [
fontsize = "7"
label = "bunting\n6000"
shape = "doublecircle"
color = "green"
];
"n479" [
label = "ldbx.lefty"
shape = "ellipse"
color = "maroon1"
];
"n482" [
label = ""
shape = "doublecircle"
color = "yellow"
];
"n483" [
label = ""
shape = "doublecircle"
color = "yellow"
];
"n484" [
label = "21088\ndot"
color = "lightblue"
];
"n486" [
label = ""
shape = "doublecircle"
color = "yellow"
];
"n487" [
label = ""
shape = "doublecircle"
color = "yellow"
];
"n488" [
label = "21089\nxterm"
color = "lightblue"
];
"n496" [
fontsize = "7"
label = "bunting\n6000"
shape = "doublecircle"
color = "green"
];
"n500" [
label = "ptyq2"
shape = "ellipse"
color = "maroon1"
];
"n503" [
label = "21090\nldbxmp"
color = "lightblue"
];
"n505" [
label = "ttyq2"
shape = "ellipse"
color = "maroon1"
];
"n512" [
label = "ptyq5"
shape = "ellipse"
color = "maroon1"
];
"n513" [
label = "ttyq5"
shape = "ellipse"
color = "maroon1"
];
"n514" [
label = "21091\ndbx"
color = "lightblue"
];
"n518" [
label = "tty"
shape = "ellipse"
color = "maroon1"
];
"n526" [
label = "delaunay.c"
shape = "ellipse"
color = "maroon1"
];
subgraph "cluster0" {
graph [
fontsize = "14"
fontname = "Times-Roman"
fontcolor = "black"
label = "toucan"
color = "black"
];
node [
fontsize = "14"
fontname = "Times-Roman"
fontcolor = "black"
shape = "box"
color = "black"
width = "0.5"
style = "filled"
];
edge [
fontsize = "14"
fontname = "Times-Roman"
fontcolor = "black"
color = "black"
];
"n0"
"n468"
"n486"
"n460"
"n487"
"n514"
"n461"
"n488"
"n462"
"n464"
"n482"
"n483"
"n448"
"n484"
"n503"
}
"n0" -> "n1" [
dir = "both"
];
"n0" -> "n2" [
dir = "both"
];
"n0" -> "n2" [
dir = "both"
];
"n0" -> "n2" [
dir = "both"
];
"n0" -> "n448" [
style = "dotted"
];
"n448" -> "n2" [
dir = "both"
];
"n448" -> "n2" [
dir = "both"
];
"n448" -> "n2" [
dir = "both"
];
"n448" -> "n449" [
dir = "back"
];
"n448" -> "n454" [
dir = "both"
];
"n448" -> "n460" [
dir = "back"
];
"n448" -> "n461" [
dir = "forward"
];
"n448" -> "n462" [
style = "dotted"
];
"n462" -> "n2" [
dir = "both"
];
"n462" -> "n2" [
dir = "both"
];
"n462" -> "n2" [
dir = "both"
];
"n462" -> "n449" [
dir = "back"
];
"n462" -> "n460" [
dir = "forward"
];
"n462" -> "n461" [
dir = "back"
];
"n462" -> "n460" [
dir = "forward"
];
"n462" -> "n461" [
dir = "back"
];
"n0" -> "n464" [
style = "dotted"
];
"n464" -> "n2" [
dir = "both"
];
"n464" -> "n2" [
dir = "both"
];
"n464" -> "n2" [
dir = "both"
];
"n464" -> "n466" [
dir = "back"
];
"n464" -> "n468" [
style = "dotted"
];
"n468" -> "n2" [
dir = "both"
];
"n468" -> "n2" [
dir = "both"
];
"n468" -> "n469" [
dir = "back"
];
"n468" -> "n474" [
dir = "both"
];
"n468" -> "n479" [
dir = "back"
];
"n468" -> "n482" [
dir = "back"
];
"n468" -> "n483" [
dir = "forward"
];
"n468" -> "n484" [
style = "dotted"
];
"n484" -> "n2" [
dir = "both"
];
"n484" -> "n483" [
dir = "back"
];
"n484" -> "n479" [
dir = "back"
];
"n484" -> "n482" [
dir = "forward"
];
"n468" -> "n486" [
dir = "back"
];
"n468" -> "n487" [
dir = "forward"
];
"n468" -> "n488" [
style = "dotted"
];
"n488" -> "n486" [
dir = "forward"
];
"n488" -> "n2" [
dir = "both"
];
"n488" -> "n487" [
dir = "back"
];
"n488" -> "n469" [
dir = "back"
];
"n488" -> "n2" [
dir = "both"
];
"n488" -> "n479" [
dir = "back"
];
"n488" -> "n496" [
dir = "both"
];
"n488" -> "n500" [
dir = "both"
];
"n488" -> "n503" [
style = "dotted"
];
"n503" -> "n479" [
dir = "back"
];
"n503" -> "n486" [
dir = "forward"
];
"n503" -> "n487" [
dir = "back"
];
"n503" -> "n505" [
dir = "both"
];
"n503" -> "n505" [
dir = "both"
];
"n503" -> "n505" [
dir = "forward"
];
"n503" -> "n512" [
dir = "both"
];
"n503" -> "n514" [
style = "dotted"
];
"n514" -> "n487" [
dir = "back"
];
"n514" -> "n486" [
dir = "forward"
];
"n514" -> "n479" [
dir = "back"
];
"n514" -> "n505" [
dir = "forward"
];
"n503" -> "n486" [
dir = "forward"
];
"n514" -> "n518" [
dir = "back"
];
"n514" -> "n513" [
dir = "both"
];
"n514" -> "n513" [
dir = "both"
];
"n514" -> "n518" [
dir = "back"
];
"n514" -> "n526" [
dir = "back"
];
"n503" -> "n487" [
dir = "back"
];
}
rendering…
dot-cluster-labeled-minlen0deterministicLabeled minlen=0 flat edge into a cluster: abomination's +1 rank renumber must shift cluster rank state (plantuml-ts xusuxe-62-guba767)
DOT source
/* Labeled flat edge crossing a cluster boundary (plantuml-ts fixture
 * xusuxe-62-guba767, reduced).
 *
 * minlen=0 on a labeled edge lets the endpoints share a rank, so the edge is
 * FLAT and its label is non-adjacent -> dotgen's abomination() inserts a rank
 * for the flat label vnode. C adds that rank at index -1 and leaves every
 * ND_rank alone; the port has no negative index and renumbers +1 instead, which
 * must carry the clusters' absolute-rank-indexed state (minrank/maxrank, rank[],
 * rankleader[]) with it. When it did not, rec_reset_vlists re-aliased the
 * cluster's rank window onto the new label rank and dot threw
 * "Cannot read properties of undefined" out of contain_nodes.
 *
 * The edge-less second cluster member (nexus) is load-bearing: it makes the
 * stale window claim n=2 over a 1-element array, which is what exposes the hole.
 *
 * @see lib/dotgen/flat.c:abomination
 * @see lib/dotgen/mincross.c:reset_vlist
 */
digraph G {
  nodesep=0.4861111111111111;
  ranksep=0.8333333333333334;
  subgraph cluster0 {
    label="Cloudogu Ecosystem";
    smeagol [shape=box, fixedsize=true, label="", width=4.215820313277778, height=1.1388888888888888];
    nexus   [shape=box, fixedsize=true, label="", width=4.0079888244166675, height=1.1388888888888888];
  }
  developer [shape=box, fixedsize=true, label="", width=0.925604926166667, height=1.0277777777777777];
  developer -> smeagol [minlen=0, label="\"Edit Slides\"", fontname="Times"];
}
rendering…
dot-pack-flat-labeldeterministicpack + labeled adjacent flat edge: GD_has_labels lives on the true cgraph root, so make_LR_constraints (g->root) uses sep[1]=5 on odd ranks inside each packed component
DOT source
// pack + a labeled ADJACENT flat edge.
//
// Guards GD_has_labels resolution under pack. C ORs EDGE_LABEL onto the true
// cgraph root (common_init_edge: agraphof(agtail(e))), never onto the packed
// component, and make_LR_constraints then reads it back as GD_has_labels(g->root)
// (position.c:234) to pick sep[1] = 5 for odd ranks. The port used to set the
// flag on the component and read it from the layout graph, so under pack both
// sides were 0 and the odd rank got the full nodesep (18) instead of 5 —
// pushing node `c` from x=167 to x=180 and widening the packed bb 250 -> 264.
digraph G {
  pack=true;
  a -> b; a -> c; a -> d;
  { rank=same; b; c; d; }
  b -> d [label="L"];
  x -> y;
}
rendering…
dot-pack-flat-label-vnodedeterministicpack + labeled NON-adjacent flat edge: flat_node/checkFlatAdjacent must read the rank table from dot_root(agtail(e)) (the component), not agroot(e) (the true root, which has none)
DOT source
// pack + a labeled NON-ADJACENT flat edge (b->d spans c, order forced by the
// b->c->d flat chain), so flat_edges must build a label vnode via flat_node.
//
// Guards dot_root() resolution under pack. C's flat_node/checkFlatAdjacent read
// the rank table from dot_root(agtail(e)) — GD_dotroot(agroot(e)), a mutable slot
// re-pointed at the graph being laid out, so under pack it is the COMPONENT. The
// port resolved e.tail.root (the TRUE root), which has no rank table at all under
// pack: checkFlatAdjacent silently bailed, and flat_node then dereferenced the
// absent table (`Cannot read properties of undefined (reading '0')`).
digraph G {
  pack=true;
  a -> b; a -> c; a -> d;
  { rank=same; b -> c -> d; }
  b -> d [label="L"];
  x -> y;
}
rendering…
dot-pack-concentratedeterministicpack + concentrate: component projection must survive edge merging (dark cell: 8 x 15 corpus graphs, never together)
DOT source
digraph G { pack=true; concentrate=true; a->b; c->b; d->b; x->y; }
rendering…
dot-pack-recorddeterministicpack + record ports: component projection with record field boxes (dark cell: 8 x 56 corpus graphs, never together)
DOT source
digraph G { pack=true; a [shape=record,label="<f0>l|<f1>r"]; b [shape=record,label="x|y"]; a:f0->b; p->q; }
rendering…
dot-pack-sameheaddeterministicpack + samehead: port merging inside a projected component (dark cell: 8 x 9 corpus graphs, never together)
DOT source
digraph G { pack=true; a->d [samehead=h]; b->d [samehead=h]; c->d [samehead=h]; x->y; }
rendering…
dot-pack-orderingdeterministicpack + ordering=out: edge order constraints inside a projected component (dark cell: 8 x 27 corpus graphs, never together)
DOT source
digraph G { pack=true; ordering=out; a->b; a->c; a->d; x->y; }
rendering…
dot-pack-headtail-labeldeterministicpack + head/tail labels: native ITSELF drops _hldraw_/_tldraw_ under pack; this locks in that surprising C behavior (dark cell: 8 x 17 corpus graphs, never together)
DOT source
digraph G {
  pack=true;
  a -> b [headlabel="HEAD", taillabel="TAIL"];
  x -> y;
}
rendering…
dot-conc-headtaildeterministicconcentrate + head/tail labels: labels on a merged edge (dark cell: 15 x 17 corpus graphs, never together)
DOT source
digraph G { concentrate=true; a->b [headlabel="H", taillabel="T"]; c->b; d->b; }
rendering…
dot-conc-sameheaddeterministicconcentrate + samehead: port merging plus edge merging (dark cell: 15 x 9 corpus graphs, never together)
DOT source
digraph G { concentrate=true; a->d [samehead=h]; b->d [samehead=h]; c->d; }
rendering…
dot-record-splinesdeterministicrecord ports + splines=true: spline routing between record fields (dark cell: 56 x 61 corpus graphs, never together)
DOT source
digraph G { splines=true; a [shape=record,label="<f0>l|<f1>r"]; b [shape=record,label="<g0>x|<g1>y"]; a:f0->b:g1; a:f1->b:g0; }
rendering…
dot-cluster-sameheaddeterministiccluster + samehead: port merging across a cluster boundary (dark cell: 271 x 9 corpus graphs, never together)
DOT source
digraph G { subgraph cluster0 { a; b; } c->a [samehead=h]; d->a [samehead=h]; b->c; }
rendering…
dot-record-xlabeldeterministicrecord/Mrecord node WITH an xlabel: common_init_node creates ND_xlabel for every shape (dark cell: 56 x 5 corpus graphs, never together -- this is the cell the record-xlabel drop lived in)
DOT source
digraph G {
  r [shape=record,  label="<f0> foo | x | <f1> bar", xlabel="RX"];
  m [shape=Mrecord, label="a | b", xlabel="MX"];
  p [shape=box, xlabel="BX"];
  r:f0 -> m;
  m -> p;
}
rendering…
dot-pack-constraintdeterministicpack + constraint=false: non-ranking edges inside a projected component, with a cluster (dark cell: pack x constraint, never together upstream)
DOT source
digraph G {
  pack=true;
  subgraph cluster0 { a; b; }
  a -> b;
  b -> a [constraint=false];
  a -> c [constraint=false];
  x -> y;
}
rendering…
dot-pack-fixedsizedeterministicpack + fixedsize nodes in a cluster: component projection with pinned node sizes (dark cell: pack x fixedsize, never together upstream)
DOT source
digraph G {
  pack=true;
  subgraph cluster0 {
    a [shape=box, fixedsize=true, width=1.5, height=0.8, label=""];
    b [shape=box, fixedsize=true, width=0.6, height=1.2, label=""];
  }
  a -> b;
  c [shape=ellipse, fixedsize=true, width=1.0, height=0.5];
  b -> c;
  x -> y;
}
rendering…
dot-pack-selfloopdeterministicpack + self-loops (labeled, in-cluster, and cross-component): self-loop routing inside a projected component (was thin ice: 1 upstream graph)
DOT source
digraph G {
  pack=true;
  subgraph cluster0 { a; b; }
  a -> a [label="loop"];
  a -> b;
  b -> b;
  x -> x;
  x -> y;
}
rendering…
dot-gap-compound-newrank-sameheaddeterministicnewrank + compound(lhead/ltail) + samehead + fixedsize + ordering + constraint=false: closes 13 dark pairs across the rank/cluster/port hubs
DOT source
digraph G {
  newrank=true; compound=true; ordering=out;
  subgraph cluster0 { a; b; }
  subgraph cluster1 { c; d; }
  a -> b;
  a -> c [lhead=cluster1, ltail=cluster0];
  e [fixedsize=true, width=1.2, height=0.6, shape=box, label=""];
  e -> c [samehead=h];
  e -> d [samehead=h];
  d -> a [constraint=false];
}
rendering…
dot-gap-concentrate-html-portsdeterministicnewrank + concentrate + HTML label + minlen=0 + record ports + constraint=false: closes 10 dark pairs
DOT source
digraph G {
  newrank=true; concentrate=true;
  h [shape=record, label="<p0> l | <p1> r"];
  t [label=<<TABLE BORDER="0"><TR><TD>html</TD></TR></TABLE>>];
  h:p0 -> t [minlen=0];
  h:p1 -> t;
  z -> t;
  t -> h [constraint=false];
}
rendering…
dot-gap-record-invis-ratiodeterministicratio=compress/size + record + samehead + fixedsize + style=invis + constraint=false: closes 9 dark pairs
DOT source
digraph G {
  ratio=compress; size="6,6";
  r [shape=record, label="<f0> a | <f1> b", fixedsize=true, width=2.0, height=0.6];
  s [shape=record, label="x | y"];
  k -> r [samehead=hh];
  m -> r [samehead=hh];
  r -> s [style=invis];
  s -> k [constraint=false];
}
rendering…
dot-gap-xlabel-headtaildeterministicordering + concentrate + fixedsize + xlabel + head/tail labels + constraint=false: closes 7 dark pairs
DOT source
digraph G {
  ordering=out; concentrate=true;
  a [fixedsize=true, width=0.9, height=0.5, shape=box, xlabel="XA"];
  b [xlabel="XB"];
  a -> b [headlabel="H", taillabel="T"];
  c -> b;
  d -> b;
  b -> a [constraint=false];
}
rendering…
dot-gap-selfloop-record-htmldeterministicordering + samehead + HTML label + minlen=0 + self-loops + record: closes 7 dark pairs
DOT source
digraph G {
  ordering=out;
  r [shape=record, label="<f0> p | <f1> q"];
  t [label=<<TABLE BORDER="0"><TR><TD>tbl</TD></TR></TABLE>>];
  r -> r [label="self"];
  a -> r [samehead=sh];
  b -> r [samehead=sh];
  a -> t [minlen=0];
  t -> t;
}
rendering…
dot-gap-rankdir-ranksame-splinesdeterministicrankdir=LR + rank=same + splines + newrank + fixedsize + constraint=false: closes 5 dark pairs
DOT source
digraph G {
  rankdir=LR; splines=true; newrank=true;
  a [fixedsize=true, width=0.8, height=0.8, shape=box, label=""];
  a -> b; b -> c;
  { rank=same; b; d; }
  c -> a [constraint=false];
}
rendering…
dot-gap-ports-xlabel-sameheaddeterministicnewrank + record ports + xlabel + samehead: closes 3 dark pairs
DOT source
digraph G {
  newrank=true;
  h [shape=record, label="<p0> l | <p1> r", xlabel="RX"];
  h:p0 -> z [samehead=q];
  h:p1 -> z [samehead=q];
  y -> z;
}
rendering…
dot-gap-ordering-invisdeterministicordering=out + a style=invis edge: closes ordering x invis
DOT source
digraph G { ordering=out; a -> b; a -> c [style=invis]; a -> d; }
rendering…
dot-gap-headtail-recorddeterministicrecord/Mrecord with head/tail labels on a port edge: closes headtaillabel x record
DOT source
digraph G {
  r [shape=record, label="<f0> a | <f1> b"];
  s [shape=Mrecord, label="c | d"];
  r:f0 -> s [headlabel="HL", taillabel="TL"];
}
rendering…
dot-pack-portlabel-angledeterministicpack + head/tail labels WITH labelangle/labeldistance: C gates place_portlabel on the ATTR DECLARATIONS (E_headlabel etc), not GD_has_labels -- a component projection has has_labels=0, so the port skipped placement and the labels kept their unplaced default. Without labelangle C skips too, which is why the plain pack x headtaillabel fixture could not catch this.
DOT source
digraph G {
  pack=true;
  a -> b [headlabel="HEAD", taillabel="TAIL", labelangle=45, labeldistance=2.5];
  x -> y;
}
rendering…
dot-newrank-minlen0deterministicnewrank=true with a minlen=0 edge: the dot2 aux-graph rank solve must preserve minlen=0 (C creates Xg edges calloc-zeroed, so merge()s MAX(0,0) keeps it)
DOT source
digraph G {
  newrank=true;
  a -> b [minlen=0];
  b -> c;
}
rendering…
dot-newrank-cluster-ranksamedeterministicnewrank x cluster x cross-cluster rank=same x minlen=0: global rank solve across cluster boundaries
DOT source
// TRIPLE: newrank x cluster x ranksame (+minlen0)
// newrank switches dot to a GLOBAL rank solve that ranks across cluster
// boundaries instead of per-cluster; cluster rank windows and ranksets then have
// to agree with a ranking they did not produce. Legal without pack (pack+newrank
// SIGSEGVs upstream -- the one permanently-dark cell).
digraph G {
  newrank=true;
  subgraph cluster0 {
    label="C0";
    a -> b;
    a -> c;
    { rank=same; b; c; }
    b -> d [minlen=0];
  }
  subgraph cluster1 {
    label="C1";
    p -> q;
    { rank=same; q; r; }
    q -> r [minlen=0];
    r -> s;
  }
  c -> p;
  d -> q;
  s -> z;
  { rank=same; a; p; }
}
rendering…
dot-pack-cluster-edgelabeldeterministicpack x cluster x edgelabel: label-rank doubling inside a cluster rank window, under component projection
DOT source
// TRIPLE: pack x cluster x edgelabel
// Edge labels make dot double the rank space (a virtual label node per edge);
// clusters carry a rank WINDOW into the root rank array; pack projects each
// component so g != g.root. has_labels is exactly the root-scoped property that
// was written to the component but read from the layout graph.
digraph G {
  pack=true;
  subgraph cluster0 {
    label="C0";
    a -> b [label="e1"];
    b -> c [label="e2"];
    a -> c [label="skip"];
  }
  c -> z [label="out"];

  subgraph cluster1 {
    label="C1";
    p -> q [label="f1"];
    q -> r [label="f2"];
  }
  p -> r [label="chord"];
}
rendering…
dot-pack-cluster-minlen0deterministicpack x cluster x minlen0: flat-edge machinery inside a cluster window, under component projection
DOT source
// TRIPLE: pack x cluster x minlen0
// minlen=0 forces endpoints onto the SAME rank -> flat-edge machinery
// (flatLimits / checkFlatAdjacent / abomination) running inside a cluster's
// rank window, under component projection.
digraph G {
  pack=true;
  subgraph cluster0 {
    label="C0";
    a -> b [minlen=0];
    a -> c [minlen=0];
    b -> c [minlen=0];
    c -> d;
  }
  d -> z;

  subgraph cluster1 {
    label="C1";
    p -> q [minlen=0];
    q -> r [minlen=0];
  }
  r -> s;
}
rendering…
dot-pack-cluster-minlen0-edgelabeldeterministicpack x cluster x minlen0 x edgelabel x edge-less cluster member (the xusuxe crash shape, plus projection)
DOT source
// 4-WAY: pack x cluster x minlen0 x edgelabel (+ edge-less cluster member)
// This is the xusuxe crash shape (cluster x minlen0 x edgelabel x edge-less
// cluster member) with component projection layered on top -- the exact class of
// conjunction every real bug this campaign lived in. Highest-risk fixture.
digraph G {
  pack=true;
  subgraph cluster0 {
    label="C0";
    lonely;                       // edge-less cluster member
    a -> b [minlen=0, label="flat"];
    b -> c [label="down"];
    a -> c [label="skip"];
  }
  c -> z [label="out"];

  subgraph cluster1 {
    label="C1";
    orphan;                       // edge-less cluster member
    e -> f [minlen=0, label="flat2"];
    f -> g [label="down2"];
  }
  e -> g [label="chord"];
}
rendering…
dot-pack-cluster-ranksamedeterministicpack x cluster x ranksame: rank sets inside cluster windows under component projection
DOT source
// TRIPLE: pack x cluster x ranksame
// rank=same collapses nodes onto one rank INSIDE a cluster window, and (2nd
// component) across a cluster boundary -- the rank-set machinery reading a
// root-scoped rank array through a projected component.
digraph G {
  pack=true;
  subgraph cluster0 {
    label="C0";
    a -> b;
    a -> c;
    { rank=same; b; c; }
    b -> d;
    c -> d;
  }
  d -> z;

  subgraph cluster1 {
    label="C1";
    p -> q;
    p -> r;
    { rank=same; q; r; }
  }
  q -> s;
  r -> s;
}
rendering…
dot-pack-nestedcluster-ranksamedeterministicpack x nested cluster x ranksame: a rank window nested inside a rank window, under projection
DOT source
// TRIPLE: pack x nested-cluster x ranksame
// Nested clusters nest rank WINDOWS (a window inside a window); under projection
// the inner window is offset twice. Each rankset stays within ONE cluster scope:
// C rejects a rankset that pulls a node out of a nested cluster into its parent
// ("already in a rankset, deleted from cluster") and exits 1.
digraph G {
  pack=true;
  subgraph cluster0 {
    label="outer0";
    a -> b;
    subgraph cluster00 {
      label="inner0";
      c -> d;
      c -> e;
      { rank=same; d; e; }
    }
    b -> c;
    d -> f;
    e -> f;
  }
  f -> z;

  subgraph cluster1 {
    label="outer1";
    p -> q;
    p -> r;
    { rank=same; q; r; }
    subgraph cluster11 {
      label="inner1";
      s -> t;
      s -> u;
      { rank=same; t; u; }
    }
    q -> s;
    r -> s;
  }
}
rendering…
dot-pack-cluster-compounddeterministicpack x cluster x compound (lhead/ltail): cluster-boundary edge clipping under projection
DOT source
// TRIPLE: pack x cluster x compound (lhead/ltail)
// compound edges clip against the CLUSTER's bounding box; under projection that
// bb belongs to a component graph, not the root.
digraph G {
  pack=true;
  compound=true;
  subgraph cluster0 {
    label="C0";
    a -> b;
  }
  subgraph cluster1 {
    label="C1";
    c -> d;
  }
  b -> c [lhead=cluster1, ltail=cluster0];
  a -> d [lhead=cluster1];

  subgraph cluster2 {
    label="C2";
    p -> q;
  }
  q -> r [ltail=cluster2];
  r -> s;
}
rendering…
dot-cluster-edgelabel-ranksamedeterministiccluster x edgelabel x ranksame: rank=same pinned onto a label-doubled rank axis inside a cluster window
DOT source
// TRIPLE: cluster x edgelabel x ranksame (no pack -- rank machinery alone)
// Edge labels DOUBLE the rank space (virtual label node per edge). rank=same
// then pins nodes onto a doubled rank, inside a cluster's rank window. The
// label-rank interleave is the part that has to survive.
digraph G {
  subgraph cluster0 {
    label="C0";
    a -> b [label="e1"];
    a -> c [label="e2"];
    { rank=same; b; c; }
    b -> d [label="e3"];
    c -> d [label="e4"];
  }
  d -> e [label="out"];
  { rank=same; e; f; }
  a -> f [label="side"];
}
rendering…
dot-pack-cluster-rankdirdeterministicpack x cluster x rankdir=LR: GD_flip cluster label bboxes under component projection
DOT source
// TRIPLE: pack x cluster x rankdir=LR
// rankdir sets GD_flip: cluster label bboxes swap w/h and the rank axis rotates.
// Under projection the flip is applied per component.
digraph G {
  pack=true;
  rankdir=LR;
  subgraph cluster0 {
    label="C0";
    a -> b;
    b -> c;
    a -> c;
  }
  c -> z;

  subgraph cluster1 {
    label="C1 longer label";
    p -> q;
    { rank=same; q; r; }
    q -> r;
  }
  r -> s;
}
rendering…
dot-pack-cluster-ordering-constraintdeterministicpack x cluster x ordering=out x constraint=false under component projection
DOT source
// TRIPLE(s): pack x cluster x ordering=out, and pack x cluster x constraint=false
// ordering=out pins edge order by AGSEQ (which virtual edges must inherit);
// constraint=false removes an edge from the rank solve while it still routes.
// Both are rank-machinery switches read through a projected component.
digraph G {
  pack=true;
  subgraph cluster0 {
    label="C0";
    ordering=out;
    a -> b;
    a -> c;
    a -> d;
    b -> e;
    c -> e;
  }
  e -> z;
  d -> a [constraint=false];

  subgraph cluster1 {
    label="C1";
    p -> q;
    p -> r;
    q -> s;
    r -> s;
  }
  s -> p [constraint=false];
}
rendering…
dot-pack-cluster-concentratedeterministicpack x cluster x concentrate: the conc.ts cluster rank-window alias, under component projection
DOT source
// TRIPLE: pack x cluster x concentrate  -- aims straight at the conc.ts fix.
// fillRankVlist now ALIASES the cluster rank window into the root rank array
// (v = rootRank.v, vStart = order(lead)) instead of slicing a copy. That aliasing
// is only exercised when a cluster is present; pack additionally makes the graph
// conc.ts sees a PROJECTED component (g != g.root). The corpus has 0 graphs with
// pack + concentrate, and none of the 14 concentrate graphs pair it with pack.
digraph G {
  pack=true;
  concentrate=true;
  subgraph cluster0 {
    label="C0";
    a -> t;
    b -> t;
    c -> t;
    t -> u;
  }
  u -> z;
  a -> b;

  subgraph cluster1 {
    label="C1";
    p -> w;
    q -> w;
    r -> w;
  }
  w -> x;
  p -> q;
}
rendering…
dot-pack-cluster-rankdir-edgelabeldeterministicpack x cluster x rankdir=LR x edgelabel: flipping a label-doubled rank axis under projection
DOT source
// 4-WAY: pack x cluster x rankdir=LR x edgelabel
// rankdir sets GD_flip (label bboxes swap w/h, rank axis rotates) while edge
// labels DOUBLE the rank space via virtual label nodes. Flipping a doubled rank
// axis inside a cluster window, under component projection.
digraph G {
  pack=true;
  rankdir=LR;
  subgraph cluster0 {
    label="C0";
    a -> b [label="e1"];
    b -> c [label="e2"];
    a -> c [label="skip"];
  }
  c -> z [label="out"];

  subgraph cluster1 {
    label="C1 wide label";
    p -> q [label="f1"];
    p -> r [label="f2"];
    { rank=same; q; r; }
  }
  q -> s [label="g1"];
}
rendering…
dot-pack-cluster-minlen0-ranksame-edgelabeldeterministicpack x cluster x minlen0 x ranksame x edgelabel: max conjunction density in the rank/cluster/projection danger zone
DOT source
// 5-WAY: pack x cluster x minlen0 x ranksame x edgelabel
// Maximum conjunction density in the danger zone: flat edges (minlen=0) and an
// explicit rankset both pinning nodes onto the SAME rank, inside a cluster
// window, on a rank axis DOUBLED by edge labels, under component projection.
digraph G {
  pack=true;
  subgraph cluster0 {
    label="C0";
    lonely;
    a -> b [minlen=0, label="flat"];
    a -> c [label="down"];
    { rank=same; b; c; }
    b -> d [label="e3"];
    c -> d [label="e4"];
  }
  d -> z [label="out"];

  subgraph cluster1 {
    label="C1";
    p -> q [label="f1"];
    p -> r [label="f2"];
    { rank=same; q; r; }
    q -> r [minlen=0, label="flat2"];
    r -> s [label="f3"];
  }
}
rendering…
dot-pack-cluster-concentrate-edgelabeldeterministicpack x cluster x concentrate x edgelabel: edge merging with label nodes through a cluster window, under projection
DOT source
// 4-WAY: pack x cluster x concentrate x edgelabel
// concentrate MERGES parallel/co-terminal edges into a shared trunk; edge labels
// give each merged edge a virtual label node on a doubled rank axis. The merge
// runs through the cluster rank window (conc.ts fillRankVlist) inside a projected
// component. Corpus has 0 graphs pairing pack with concentrate at all.
digraph G {
  pack=true;
  concentrate=true;
  subgraph cluster0 {
    label="C0";
    a -> t [label="m1"];
    b -> t [label="m2"];
    c -> t [label="m3"];
    t -> u [label="trunk"];
  }
  u -> z [label="out"];
  a -> b;

  subgraph cluster1 {
    label="C1";
    p -> w [label="n1"];
    q -> w [label="n2"];
    w -> x [label="n3"];
  }
  p -> q;
}
rendering…
dot-newrank-compact-weakdeterministicnewrank + two compact (strong) clusters: cross-cluster edge becomes a weak constraint; shared TOP/BOT node keeps ranks minimal
DOT source
// Exercises C's weak() path in dot2: is_a_strong_cluster(g) is mapbool(agget(g,
// "compact")), so a cross-cluster edge only becomes a WEAK constraint when a
// cluster sets compact=true. No upstream corpus graph and no golden sets it, so
// this path was entirely unexercised.
digraph G {
  newrank=true;
  subgraph cluster0 { compact=true; label="C0"; a -> b [minlen=0]; b -> c; }
  subgraph cluster1 { compact=true; label="C1"; p -> q; }
  c -> p;
  a -> q [minlen=0];
  q -> z;
}
rendering…
dot-newrank-compact-singledeterministicnewrank + one compact cluster: strong-cluster TOP/BOT skeleton with a single cluster
DOT source
digraph G { newrank=true; subgraph cluster0 { compact=true; a->b; b->c; a->c; } c->d; }
rendering…
dot-newrank-compact-threedeterministicnewrank + three compact clusters: STRONG_CLUSTER_WEIGHT accumulates onto one shared TOP->BOT edge across all three
DOT source
digraph G {
  newrank=true;
  subgraph cluster0 { compact=true; a->b [minlen=0]; }
  subgraph cluster1 { compact=true; c->d; }
  subgraph cluster2 { compact=true; e->f [minlen=0]; }
  b->c; d->e; a->e [minlen=0]; f->z;
}
rendering…
dot-newrank-compact-nesteddeterministicnewrank + nested compact clusters: strong-cluster skeleton nested inside a strong cluster
DOT source
digraph G {
  newrank=true;
  subgraph cluster0 { compact=true; a->b;
    subgraph cluster00 { compact=true; c->d; }
    b->c; }
  d->z;
}
rendering…
dot-newrank-compact-mixeddeterministicnewrank + one compact and one non-compact cluster: weak vs strong constraint dispatch side by side
DOT source
digraph G {
  newrank=true;
  subgraph cluster0 { compact=true; a->b [minlen=0]; }
  subgraph cluster1 { p->q; }   /* not compact */
  b->p; a->q [minlen=0]; q->z;
}