Parity overview
Cross-engine conformance summary of graphviz-ts 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) | 761 | 745 | 0 | 3 | 13 | 97.9% |
| twopi (xdot) | 761 | 739 | 0 | 14 | 8 | 97.1% |
| osage (xdot) | 761 | 750 | 0 | 6 | 5 | 98.6% |
| patchwork (xdot) | 761 | 756 | 0 | 0 | 5 | 99.3% |
| dot (imagemap) | 761 | 755 | 0 | 0 | 6 | 99.2% |
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) | 761 | 409 | 37 | 308 | 7 | 53.7% |
| fdp (xdot) | 761 | 600 | 19 | 126 | 16 | 78.8% |
| sfdp (xdot) | 762 | 518 | 52 | 184 | 8 | 68.0% |
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)