Skip to content

osage parity dashboard

Differential survey of graphviz-ts osage xdot output vs the native dot -K osage -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 osage && npx tsx test/corpus/parity-report.ts.

Summary

  • Surveyed: 761 (generated 2026-07-15T00:41:06.303Z)
  • pass: 750 (98.6%) · diverged (tracked): 0 · accepted (documented, won't-fix): 6
  • oracle-error: 5 · port-error: 0 · timeout: 0

Accepted deltas (6) — 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
1855110A9110 xdot draw-op diffs = 3 obstacle-routed edges (6->1 B10, 16->1 B7, 30->1 B10) routed on the mirror side of the node row; X bit-exact, Y mirrored (6->1 429.120 vs 385.608). Node centers already bit-exact. Mechanism: octagon obstacle vertices (circumscribed_polygon_corner_about_ellipse) differ 3-4 ULP from C because clang -ffp-contract=on fuses the a*b+-c chains in ellipse_tangent_slope/line_intersection while V8 rounds each op; C's fused rounding collapses a gutter column of corner-x to one bit-exact double (exact collinearity), the port's splits it into two, flipping the visibility clear() tangency test so the gutter is no longer blocked -> ~20 extra visibility edges -> Dijkstra resolves the up/down homotopy tie to the mirror side. cos/sin injection is a no-op; C-obstacle injection A/B -> 0 diffs. Full RCA: .agent-notes/osage-spline-family-rca.md.known-divergences.md#a9-engine-track-twopi-circo
graphs-polypoly24A9Rigid pack-cell swap of the 9000-series distorted-quad components (whole-node ±(182,338)/±2909 translations; <=24 draw-op diffs per id, no shape/routing error). Mechanism: bare transcendental cos(pi+theta) — V8 Math.cos is correctly rounded while Apple libm's cos carries a 1-ULP argument-dependent error, so |cos(pi+theta)| != |cos(theta)| only under libm; the 1-ULP size delta feeds pack GRID ceil, tips a perimeter tie, and qsort swaps two components' cells. No deterministic rewrite reproduces a non-correctly-rounded libm transcendental. osage only. Full RCA: .agent-notes/patchwork-tail-rca.md.known-divergences.md#a9-engine-track-twopi-circo
linux.i386-b293A92 draw-op diffs; edge Node14663->Node14649 label ldraw text x-anchor 878.28 (port) vs 841.06 (oracle) on both label lines. Edge spline (B 4 1040.15 72 ... 679.18 72) and arrowhead tdraw are BIT-IDENTICAL; only the label anchor differs, placed symmetrically about the bit-identical spline midpoint ~859.67 (±18.6 = half the label width). Same placeLabels knife-edge accepted for twopi/graphs-b29: a 1-ULP drift in the surrounding objects tips a label-side tie. share-b29 is the mirror (841.06 vs 878.28). 2 diffs in a 136 KB graph, every other label bit-matches. Full RCA: .agent-notes/osage-small-tail-rca.md.known-divergences.md#a9-engine-track-twopi-circo
share-b293A92 draw-op diffs; mirror of linux.i386-b29 (label anchor 841.06 vs 878.28) — same placeLabels knife-edge tie; edge spline + arrowhead bit-identical, all other labels match.known-divergences.md#a9-engine-track-twopi-circo
share-polypoly12A9Rigid pack-cell swap of the 9000-series distorted-quad components (whole-node ±(182,338)/±2909 translations; <=24 draw-op diffs per id, no shape/routing error). Mechanism: bare transcendental cos(pi+theta) — V8 Math.cos is correctly rounded while Apple libm's cos carries a 1-ULP argument-dependent error, so |cos(pi+theta)| != |cos(theta)| only under libm; the 1-ULP size delta feeds pack GRID ceil, tips a perimeter tie, and qsort swaps two components' cells. No deterministic rewrite reproduces a non-correctly-rounded libm transcendental. osage only. Full RCA: .agent-notes/patchwork-tail-rca.md.known-divergences.md#a9-engine-track-twopi-circo
windows-polypoly12A9Rigid pack-cell swap of the 9000-series distorted-quad components (whole-node ±(182,338)/±2909 translations; <=24 draw-op diffs per id, no shape/routing error). Mechanism: bare transcendental cos(pi+theta) — V8 Math.cos is correctly rounded while Apple libm's cos carries a 1-ULP argument-dependent error, so |cos(pi+theta)| != |cos(theta)| only under libm; the 1-ULP size delta feeds pack GRID ceil, tips a perimeter tie, and qsort swaps two components' cells. No deterministic rewrite reproduces a non-correctly-rounded libm transcendental. osage only. Full RCA: .agent-notes/patchwork-tail-rca.md.known-divergences.md#a9-engine-track-twopi-circo

Diverged (0)

(none)

Errors and timeouts (5)

idstatusmessage
1879oracle-errorCommand failed: /Users/scottseely/git/graphviz/build/cmd/dot/dot -K osage -Txdot /Users/scottseely/git/graphviz/tests/1879.dot
2516oracle-errorCommand failed: /Users/scottseely/git/graphviz/build/cmd/dot/dot -K osage -Txdot /Users/scottseely/git/graphviz/tests/2516.dot
2619oracle-errorCommand failed: /Users/scottseely/git/graphviz/build/cmd/dot/dot -K osage -Txdot /Users/scottseely/git/graphviz/tests/2619.dot
2619_1oracle-errorCommand failed: /Users/scottseely/git/graphviz/build/cmd/dot/dot -K osage -Txdot /Users/scottseely/git/graphviz/tests/2619_1.dot
2619_2oracle-errorCommand failed: /Users/scottseely/git/graphviz/build/cmd/dot/dot -K osage -Txdot /Users/scottseely/git/graphviz/tests/2619_2.dot

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