Skip to content

twopi parity dashboard

Differential survey of graphviz-ts twopi xdot output vs the native dot -K twopi -Txdot oracle over the dot-track SVG-conformant corpus set (semantic draw-op comparison at ±0.01 — see test/golden/compare-xdot.ts; per docs/conformance.md, not byte equality). Regenerate: npx tsx test/corpus/engine-walk.ts twopi && npx tsx test/corpus/parity-report.ts.

Summary

  • Surveyed: 761 (generated 2026-07-15T00:26:13.577Z)
  • pass: 739 (97.1%) · diverged (tracked): 0 · accepted (documented, won't-fix): 14
  • oracle-error: 8 · port-error: 0 · timeout: 0

Accepted deltas (14) — documented, not chased

Deliberate, root-caused differences we have chosen not to make conformant. Source of truth: test/corpus/accepted-divergences-engines.json; rationale in Known divergences. Excluded from the diverged table below.

id#diffsclassboundref
1855842A1842 xdot draw-op diffs; whole radial layout is the exact x-axis mirror of the oracle's (y->-y, ring relabel k<->34-k), max node displacement 6.04pt. Mechanism: 1-ULP V8-vs-libm cos/sin in circleLayout setAbsolutePos, amplified by the symmetry-unstable PRISM overlap-removal equilibrium on the cocircular star. Injection A/B: feeding C's exact circleLayout pos into the port's PRISM reproduces the oracle node-for-node (3e-14).known-divergences.md#a1-twopi-arrows-family
graphs-arrows40A132 draw-op diffs, all on edge Z->I; unfilled_bezier[ptCount]: 8 vs 14known-divergences.md#a1-twopi-arrows-family
graphs-arrowsize72A164 draw-op diffs on edge Z->I; first diff unfilled_bezier[0]: 289.55 vs 297.2 (position drift, not a ptCount flip, but same pre-routing mechanism)known-divergences.md#a1-twopi-arrows-family
graphs-newarrows40A132 draw-op diffs, all on edge Z->I; unfilled_bezier[ptCount]: 8 vs 14 (same graph family as graphs-arrows)known-divergences.md#a1-twopi-arrows-family
linux.x86-arrows_dot40A132 draw-op diffs, all on edge Z->I; unfilled_bezier[ptCount]: 8 vs 14 (arrows_dot variant of graphs-arrows)known-divergences.md#a1-twopi-arrows-family
macosx-arrows_dot40A132 draw-op diffs, all on edge Z->I; unfilled_bezier[ptCount]: 8 vs 14 (arrows_dot variant of graphs-arrows)known-divergences.md#a1-twopi-arrows-family
nshare-arrows_dot40A125 draw-op diffs on edge i->Z; first diff unfilled_bezier[0]: 265.18 vs 313.93 (position drift, not a ptCount flip, but same pre-routing mechanism)known-divergences.md#a1-twopi-arrows-family
share-newarrows20A112 draw-op diffs, all on edge Z->I; unfilled_bezier[ptCount]: 8 vs 14 (newarrows variant of graphs-newarrows)known-divergences.md#a1-twopi-arrows-family
windows-newarrows20A112 draw-op diffs, all on edge Z->I; unfilled_bezier[ptCount]: 8 vs 14 (newarrows variant of graphs-newarrows)known-divergences.md#a1-twopi-arrows-family
22392A91 draw-op diff; edge label ldraw text[1]: 183.86 vs 173.06known-divergences.md#a9-engine-track-twopi-circo
241_06A96 draw-op diffs; edge 1->6 routed as a 14-pt multispline corridor (port) vs the native plain per-member fallback (8-pt), point deltas <0.07pt. CDT cocircular incircle tie flipped by libm sin/cos 1-ULP — sibling of the accepted circo/241_0 entry.known-divergences.md#a9-engine-track-twopi-circo
2470596A9298 draw-op diffs, ALL edge-label ldraw text positions (HTML <td align=left>LOOKBACK labels); every diff = one xlabel candidate step (+label width x, -16.8 line-height y). Splines/nodes/bboxes bit-identical to oracle (0 draw/pos/bb diffs even @1e-7). Mechanism: ~140 near-coincident HTML edge-label anchors are placed by the neato-family xlabel placer (postproc.c:addXLabels -> label/xlabels.c). Patient-zero seq=8: node ND_coord.y differs 1.3e-13 (~2 ULP, twopi radial libm sin/cos vs V8 Math) while ND_height/sz.y/2 are bit-identical; floor(coord.y - sz.y/2) straddles exactly 0, flipping objplpmks rect y-low -1<->0 -> Hilbert key -> R-tree insertion order -> node grouping (C root 19 branches vs port 22) -> RTreeSearch pruning -> xlabel candidate flip. xladjust/AGSEQ order/CombineRect(min-min quirk)/PickBranch u64/int32 Hilbert key all faithful. No deterministic rewrite reproduces the libm coordinate. Same class as twopi/1855 and the b29 placeLabels-tie A9 family. Full RCA: .agent-notes/twopi-2470-rca.md.known-divergences.md#a9-engine-track-twopi-circo
graphs-b292A91 draw-op diff; edge label ldraw text[1]: 368.1 vs 356.1 (same knife-edge previously accepted for share-b29/windows-b29; variants swapped when polylineMidpoint gained the faithful fmadd contraction - anchor now bit-identical to C, flip is a placeLabels tie on 1-ULP-drifted surrounding objects)known-divergences.md#a9-engine-track-twopi-circo
linux.i386-b292A91 draw-op diff; edge label ldraw text[1]: 368.1 vs 356.1 (identical mechanism to graphs-b29)known-divergences.md#a9-engine-track-twopi-circo

Diverged (0)

(none)

Errors and timeouts (8)

idstatusmessage
1879oracle-errorCommand failed: /Users/scottseely/git/graphviz/build/cmd/dot/dot -K twopi -Txdot /Users/scottseely/git/graphviz/tests/1879.dot
2095oracle-errorCommand failed: /Users/scottseely/git/graphviz/build/cmd/dot/dot -K twopi -Txdot /Users/scottseely/git/graphviz/tests/2095.dot
2108oracle-errorspawnSync /Users/scottseely/git/graphviz/build/cmd/dot/dot ETIMEDOUT
2222oracle-errorspawnSync /Users/scottseely/git/graphviz/build/cmd/dot/dot ETIMEDOUT
2516oracle-errorCommand failed: /Users/scottseely/git/graphviz/build/cmd/dot/dot -K twopi -Txdot /Users/scottseely/git/graphviz/tests/2516.dot
2619oracle-errorCommand failed: /Users/scottseely/git/graphviz/build/cmd/dot/dot -K twopi -Txdot /Users/scottseely/git/graphviz/tests/2619.dot
2619_1oracle-errorCommand failed: /Users/scottseely/git/graphviz/build/cmd/dot/dot -K twopi -Txdot /Users/scottseely/git/graphviz/tests/2619_1.dot
2619_2oracle-errorCommand failed: /Users/scottseely/git/graphviz/build/cmd/dot/dot -K twopi -Txdot /Users/scottseely/git/graphviz/tests/2619_2.dot

oracle errors: 8 native-crash (documented, excluded) / 0 timeout-flake (excluded this run, note to retry) Passing ids (739) are omitted for brevity — the full roster is in parity-twopi.json.