Skip to content

twopi parity dashboard

Differential survey of @knowvah/dot-engine 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: 762 (generated 2026-07-25T03:56:05.961Z)
  • pass: 746 (97.9%) · diverged (tracked): 0 · accepted (documented, won't-fix): 14
  • oracle-error: 1 · port-error: 0 · timeout: 1

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-arrowsize23A164 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_dot29A132 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 (2)

idstatusmessage
2222oracle-errorspawnSync dot ETIMEDOUT
2108timeout

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