Parity overview
Cross-engine conformance summary of @knowvah/dot-engine vs the native Graphviz oracle, one row per track (engine × comparison surface). A report, not a gate. Regenerate: npx tsx test/corpus/parity-report.ts (after refreshing the per-track surveys it reads).
conformant / pass is the ±0.01 deterministic-tolerance verdict per docs/conformance.md — numeric payloads agree within tolerance and non-numeric content is exactly equal — not byte equality. errors = oracle-error + port-error/errored + timeout (excluded from scoring). accepted = documented won't-fix deltas (0 for engines without an acceptance list).
Tracks
| track | surveyed | conformant / pass | diverged | accepted | errors | pass % |
|---|---|---|---|---|---|---|
| dot (SVG) | 788 | 762 | 0 | 16 | 10 | 96.7% |
| dot (xdot) | 761 | 761 | 0 | 0 | 0 | 100.0% |
| dot (json) | 761 | 759 | 0 | 2 | 0 | 99.7% |
| circo (xdot) | 762 | 752 | 0 | 4 | 6 | 98.7% |
| twopi (xdot) | 762 | 746 | 0 | 14 | 2 | 97.9% |
| osage (xdot) | 762 | 755 | 0 | 7 | 0 | 99.1% |
| patchwork (xdot) | 762 | 762 | 0 | 0 | 0 | 100.0% |
| dot (imagemap) | 761 | 755 | 0 | 0 | 6 | 99.2% |
| dot (plain) | 762 | 754 | 0 | 7 | 1 | 99.0% |
| circo (plain) | 762 | 731 | 0 | 10 | 21 | 95.9% |
| twopi (plain) | 762 | 731 | 0 | 21 | 10 | 95.9% |
| osage (plain) | 762 | 747 | 0 | 14 | 1 | 98.0% |
| patchwork (plain) | 762 | 755 | 0 | 7 | 0 | 99.1% |
| circo (json) | 762 | 750 | 0 | 6 | 6 | 98.4% |
| twopi (json) | 762 | 744 | 0 | 16 | 2 | 97.6% |
| osage (json) | 762 | 750 | 0 | 12 | 0 | 98.4% |
| patchwork (json) | 762 | 760 | 0 | 2 | 0 | 99.7% |
| circo (imagemap) | 762 | 756 | 0 | 0 | 6 | 99.2% |
| twopi (imagemap) | 762 | 760 | 0 | 0 | 2 | 99.7% |
| osage (imagemap) | 762 | 761 | 0 | 1 | 0 | 99.9% |
| patchwork (imagemap) | 762 | 762 | 0 | 0 | 0 | 100.0% |
Iterative engines (±0.5 characterization)
neato/fdp/sfdp are iterative force-directed solvers whose results depend on floating-point accumulation (FMA, Math.pow, libm) that JavaScript cannot reproduce bit-for-bit — accepted class A1. These rows are compared at a ±0.5pt tolerance to characterize behavior, not to gate byte-fidelity; do not read their pass % against the deterministic bar above.
| track | surveyed | conformant / pass | diverged | accepted | errors | pass % |
|---|---|---|---|---|---|---|
| neato (xdot) | 762 | 689 | 0 | 71 | 2 | 90.4% |
| fdp (xdot) | 762 | 609 | 0 | 148 | 5 | 79.9% |
| sfdp (xdot) | 762 | 527 | 0 | 232 | 3 | 69.2% |
| neato (plain) | 762 | 753 | 0 | 7 | 2 | 98.8% |
| fdp (plain) | 762 | 750 | 0 | 7 | 5 | 98.4% |
| sfdp (plain) | 762 | 753 | 0 | 7 | 2 | 98.8% |
| neato (json) | 762 | 687 | 0 | 73 | 2 | 90.2% |
| fdp (json) | 762 | 607 | 0 | 151 | 4 | 79.7% |
| sfdp (json) | 762 | 525 | 0 | 235 | 2 | 68.9% |
| neato (imagemap) | 762 | 754 | 0 | 6 | 2 | 99.0% |
| fdp (imagemap) | 762 | 739 | 0 | 18 | 5 | 97.0% |
| sfdp (imagemap) | 762 | 733 | 0 | 27 | 2 | 96.2% |
Dot output formats (SVG · xdot · json)
How faithfully the port renders each input across all three deterministic dot outputs, joined by id. xdot and json survey the SVG-conformant roster, so this is the intersection (761 inputs); an input is conformant in all three only when every format agrees with the oracle within tolerance.
| status across SVG · xdot · json | count | % |
|---|---|---|
| conformant in all three | 759 | 99.7% |
| accepted (won't-fix) in ≥1, diverged in none | 2 | 0.3% |
| diverged / errored in ≥1 | 0 | 0.0% |
Per-format status of the ids not conformant in all three:
| id | SVG | xdot | json |
|---|---|---|---|
share-Latin1 | conformant | conformant | accepted |
windows-Latin1 | conformant | conformant | accepted |
Goldens
211 pinned golden inputs (test/golden/manifest.json), by engine:
| engine | goldens |
|---|---|
| dot | 160 |
| neato | 8 |
| fdp | 7 |
| sfdp | 6 |
| circo | 8 |
| twopi | 8 |
| osage | 7 |
| patchwork | 7 |
The golden xdot suite gates these in CI (test/golden/xdot-suite.test.ts).
Per-track dashboards
- PARITY-dot.md — dot (SVG) dashboard (
dashboard.ts) - PARITY-XDOT.md — dot (xdot) dashboard (
xdot-dashboard.ts) - PARITY-JSON.md — dot (json) dashboard (
json-dashboard.ts) - PARITY-MAP.md — dot (imagemap) dashboard (
map-dashboard.ts) - PARITY-circo.md — circo (xdot) dashboard (
parity-report.ts) - PARITY-twopi.md — twopi (xdot) dashboard (
parity-report.ts) - PARITY-osage.md — osage (xdot) dashboard (
parity-report.ts) - PARITY-patchwork.md — patchwork (xdot) dashboard (
parity-report.ts) - PARITY-neato.md — neato (xdot) dashboard (
parity-report.ts) - PARITY-fdp.md — fdp (xdot) dashboard (
parity-report.ts) - PARITY-sfdp.md — sfdp (xdot) dashboard (
parity-report.ts) - PARITY-dot-plain.md — dot (plain) dashboard (
parity-report.ts) - PARITY-circo-plain.md — circo (plain) dashboard (
parity-report.ts) - PARITY-twopi-plain.md — twopi (plain) dashboard (
parity-report.ts) - PARITY-osage-plain.md — osage (plain) dashboard (
parity-report.ts) - PARITY-patchwork-plain.md — patchwork (plain) dashboard (
parity-report.ts) - PARITY-neato-plain.md — neato (plain) dashboard (
parity-report.ts) - PARITY-fdp-plain.md — fdp (plain) dashboard (
parity-report.ts) - PARITY-sfdp-plain.md — sfdp (plain) dashboard (
parity-report.ts) - PARITY-circo-json.md — circo (json) dashboard (
parity-report.ts) - PARITY-twopi-json.md — twopi (json) dashboard (
parity-report.ts) - PARITY-osage-json.md — osage (json) dashboard (
parity-report.ts) - PARITY-patchwork-json.md — patchwork (json) dashboard (
parity-report.ts) - PARITY-neato-json.md — neato (json) dashboard (
parity-report.ts) - PARITY-fdp-json.md — fdp (json) dashboard (
parity-report.ts) - PARITY-sfdp-json.md — sfdp (json) dashboard (
parity-report.ts) - PARITY-circo-map.md — circo (imagemap) dashboard (
parity-report.ts) - PARITY-twopi-map.md — twopi (imagemap) dashboard (
parity-report.ts) - PARITY-osage-map.md — osage (imagemap) dashboard (
parity-report.ts) - PARITY-patchwork-map.md — patchwork (imagemap) dashboard (
parity-report.ts) - PARITY-neato-map.md — neato (imagemap) dashboard (
parity-report.ts) - PARITY-fdp-map.md — fdp (imagemap) dashboard (
parity-report.ts) - PARITY-sfdp-map.md — sfdp (imagemap) dashboard (
parity-report.ts)