Skip to content

twopi json parity dashboard

Differential survey of @knowvah/dot-engine twopi json output vs the native dot -K twopi oracle (test/corpus/json-walk.ts), semantic comparison per docs/conformance.md (±0.01 deterministic tolerance, ±0.5 for the iterative engines). Regenerate: npx tsx test/corpus/json-walk.ts twopi && npx tsx test/corpus/parity-report.ts.

Summary

  • Surveyed: 762
  • pass: 744 (97.6%) · diverged (tracked): 0 · accepted (documented, won't-fix): 16
  • errors (oracle/port/timeout, excluded from scoring): 2

Diverged (0)

(none)

Accepted (16) — documented, not chased

id#diffsfirstDiffreason
1855842edge:10->1#0/_draw_/op[1].b[0]layout drift inherited from the twopi xdot engine track: id diverged there with the documented accepted mechanism (iterative drift / engine tail classes, engine registry + decision journal); json re-emits the same layout. Journal 2026-07-24.
22392edge:srtpdec1_0x5641244e6b50_rtcp_src_0x7f06a000ebd0->_proxypad10_0x5641244e58c0#0/_ldraw_/op[2].T[1]layout drift inherited from the twopi xdot engine track: id diverged there with the documented accepted mechanism (iterative drift / engine tail classes, engine registry + decision journal); json re-emits the same layout. Journal 2026-07-24.
241_06edge:1->6#0/_draw_/op[1].b[ptCount]layout drift inherited from the twopi xdot engine track: id diverged there with the documented accepted mechanism (iterative drift / engine tail classes, engine registry + decision journal); json re-emits the same layout. Journal 2026-07-24.
2470596edge:n13->n12#0/_ldraw_/op[2].T[0]layout drift inherited from the twopi xdot engine track: id diverged there with the documented accepted mechanism (iterative drift / engine tail classes, engine registry + decision journal); json re-emits the same layout. Journal 2026-07-24.
graphs-arrows40edge:Z->I#0/_draw_/op[1].b[ptCount]layout drift inherited from the twopi xdot engine track: id diverged there with the documented accepted mechanism (iterative drift / engine tail classes, engine registry + decision journal); json re-emits the same layout. Journal 2026-07-24.
graphs-arrowsize23edge:i->Z#0/_draw_/op[1].b[0]layout drift inherited from the twopi xdot engine track: id diverged there with the documented accepted mechanism (iterative drift / engine tail classes, engine registry + decision journal); json re-emits the same layout. Journal 2026-07-24.
graphs-b292edge:Node14732->Node14731#0/_ldraw_/op[2].T[1]layout drift inherited from the twopi xdot engine track: id diverged there with the documented accepted mechanism (iterative drift / engine tail classes, engine registry + decision journal); json re-emits the same layout. Journal 2026-07-24.
graphs-newarrows40edge:Z->I#0/_draw_/op[1].b[ptCount]layout drift inherited from the twopi xdot engine track: id diverged there with the documented accepted mechanism (iterative drift / engine tail classes, engine registry + decision journal); json re-emits the same layout. Journal 2026-07-24.
linux.i386-b292edge:Node14732->Node14731#0/_ldraw_/op[2].T[1]layout drift inherited from the twopi xdot engine track: id diverged there with the documented accepted mechanism (iterative drift / engine tail classes, engine registry + decision journal); json re-emits the same layout. Journal 2026-07-24.
linux.x86-arrows_dot40edge:Z->I#0/_draw_/op[1].b[ptCount]layout drift inherited from the twopi xdot engine track: id diverged there with the documented accepted mechanism (iterative drift / engine tail classes, engine registry + decision journal); json re-emits the same layout. Journal 2026-07-24.
macosx-arrows_dot40edge:Z->I#0/_draw_/op[1].b[ptCount]layout drift inherited from the twopi xdot engine track: id diverged there with the documented accepted mechanism (iterative drift / engine tail classes, engine registry + decision journal); json re-emits the same layout. Journal 2026-07-24.
nshare-arrows_dot40edge:Z->I#0/_draw_/op[1].b[ptCount]layout drift inherited from the twopi xdot engine track: id diverged there with the documented accepted mechanism (iterative drift / engine tail classes, engine registry + decision journal); json re-emits the same layout. Journal 2026-07-24.
share-Latin11node:a/labelInput is Latin-1 with NO charset declaration, so the bytes are invalid UTF-8. Native dot's -Tjson then emits a MIXED-ENCODING document: attribute values (e.g. node label) are echoed as RAW Latin-1 bytes (0xe1 0xe2 ... unconverted), while the DRAWN label text (ldraw T op, via make_label) is UTF-8 (0xc3 0xa1 ...). No single decode reads both halves correctly: Latin-1 recovers the attribute but mojibakes the text, UTF-8 does the reverse (and the attribute bytes are not valid UTF-8). The port decodes the input once (utils.c latin1ToUTF8 fallback) and is internally consistent valid UTF-8 on BOTH surfaces, so it cannot reproduce the oracle's split encoding. A4 class: the oracle output is an encoding bug; the port declines to emit invalid/mixed-encoding JSON. The DECLARED charset=latin1 case (graphs-Latin1/b60) IS handled via the stoj double-encode fix; only the UNDECLARED-charset case is irreducible.
share-newarrows22edge:i->Z#0/_draw_/op[1].b[0]layout drift inherited from the twopi xdot engine track: id diverged there with the documented accepted mechanism (iterative drift / engine tail classes, engine registry + decision journal); json re-emits the same layout. Journal 2026-07-24.
windows-Latin11node:a/labelIdentical mechanism to share-Latin1: undeclared-charset Latin-1 input makes native -Tjson emit raw-Latin-1 attribute bytes alongside UTF-8 drawn text (mixed, invalid). The port's consistent-UTF-8 output cannot match both halves. A4 class.
windows-newarrows20edge:Z->I#0/_draw_/op[1].b[ptCount]layout drift inherited from the twopi xdot engine track: id diverged there with the documented accepted mechanism (iterative drift / engine tail classes, engine registry + decision journal); json re-emits the same layout. Journal 2026-07-24.

Errors and timeouts (2)

idmessage
2108
2222oracle exit null

Passing ids (744) are omitted for brevity — the full roster is in json-parity-twopi.json.