Skip to content

osage parity dashboard

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

Accepted deltas (7) — 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
16524A92 draw-op diffs; two edges each flip one edge-label anchor with BIT-IDENTICAL spline + arrowhead. Op_1091->Op_1092 label x-anchor 2266.75 vs 2332.07 (symmetric about the identical spline midpoint 2299.4, ±32.66 = half the 65.32 label width); Op_2105->Op_2106 label y-anchor 247.54 vs 230.74 (above/below flip on a horizontal edge, x-anchor identical). placeLabels tie on 1-ULP-drifted surroundings, same class as b29. 2 diffs in a 240 KB graph; oracle renders completely (not a timeout). Full RCA: .agent-notes/osage-small-tail-rca.md.known-divergences.md#a9-engine-track-twopi-circo
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 (0)

(none)

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