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 | #diffs | class | bound | ref |
|---|---|---|---|---|
1855 | 842 | A1 | 842 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-arrows | 40 | A1 | 32 draw-op diffs, all on edge Z->I; unfilled_bezier[ptCount]: 8 vs 14 | known-divergences.md#a1-twopi-arrows-family |
graphs-arrowsize | 72 | A1 | 64 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-newarrows | 40 | A1 | 32 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_dot | 40 | A1 | 32 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_dot | 40 | A1 | 32 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_dot | 40 | A1 | 25 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-newarrows | 20 | A1 | 12 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-newarrows | 20 | A1 | 12 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 |
2239 | 2 | A9 | 1 draw-op diff; edge label ldraw text[1]: 183.86 vs 173.06 | known-divergences.md#a9-engine-track-twopi-circo |
241_0 | 6 | A9 | 6 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 |
2470 | 596 | A9 | 298 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-b29 | 2 | A9 | 1 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-b29 | 2 | A9 | 1 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)
| id | status | message |
|---|---|---|
1879 | oracle-error | Command failed: /Users/scottseely/git/graphviz/build/cmd/dot/dot -K twopi -Txdot /Users/scottseely/git/graphviz/tests/1879.dot |
2095 | oracle-error | Command failed: /Users/scottseely/git/graphviz/build/cmd/dot/dot -K twopi -Txdot /Users/scottseely/git/graphviz/tests/2095.dot |
2108 | oracle-error | spawnSync /Users/scottseely/git/graphviz/build/cmd/dot/dot ETIMEDOUT |
2222 | oracle-error | spawnSync /Users/scottseely/git/graphviz/build/cmd/dot/dot ETIMEDOUT |
2516 | oracle-error | Command failed: /Users/scottseely/git/graphviz/build/cmd/dot/dot -K twopi -Txdot /Users/scottseely/git/graphviz/tests/2516.dot |
2619 | oracle-error | Command failed: /Users/scottseely/git/graphviz/build/cmd/dot/dot -K twopi -Txdot /Users/scottseely/git/graphviz/tests/2619.dot |
2619_1 | oracle-error | Command failed: /Users/scottseely/git/graphviz/build/cmd/dot/dot -K twopi -Txdot /Users/scottseely/git/graphviz/tests/2619_1.dot |
2619_2 | oracle-error | Command 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.