dot plain/plain-ext parity dashboard
Differential survey of @knowvah/dot-engine dot plain/plain-ext output vs the native dot -K dot oracle (test/corpus/plain-walk.ts), semantic comparison per docs/conformance.md (±0.01 deterministic tolerance, ±0.5 for the iterative engines). Regenerate: npx tsx test/corpus/plain-walk.ts dot && npx tsx test/corpus/parity-report.ts.
Summary
- Surveyed: 762
- pass: 754 (99.0%) · diverged (tracked): 0 · accepted (documented, won't-fix): 7
- errors (oracle/port/timeout, excluded from scoring): 1
Diverged (0)
(none)
Accepted (7) — documented, not chased
| id | #diffs | firstDiff | reason |
|---|---|---|---|
graphs-b34 | 1 | [node] 7/label: port=montañas native=�� | oracle bug (A4): canon() use-after-free — output.c:103-108 agstrfree()s the agstrdup-ed refstr before the caller prints it, and _agstrcanon returns that pointer whenever no quoting is needed. Labels whose text is not otherwise pooled (latin1/entity-converted, differs from the raw attr bytes) hit refcnt 0 and are freed; the intervening printdouble allocations reuse the block, so native prints garbage/empty. Port prints the correct converted text. Journal 2026-07-24. |
graphs-b56 | 6 | [node] Schluesseloel/label: port=Schluesselöl native=v; [node] Schluesseltraeger/label: port=Schlueßelträger native=v; [node] Torschluessel/label: port=Torschlüssel native=v; [node] Torwaechter/label: port=Torwächter native=v; [node] creation/label: port=<f0>genPräfix|<f1>legennStamm|<f2>heitnSuffix native=<f0>genPr�fix|<f1>legennStamm|<f2>heitnSuffix | oracle bug (A4): canon() use-after-free — output.c:103-108 agstrfree()s the agstrdup-ed refstr before the caller prints it, and _agstrcanon returns that pointer whenever no quoting is needed. Labels whose text is not otherwise pooled (latin1/entity-converted, differs from the raw attr bytes) hit refcnt 0 and are freed; the intervening printdouble allocations reuse the block, so native prints garbage/empty. Port prints the correct converted text. Journal 2026-07-24. |
graphs-b60 | 5 | [node] 0/label: port=XXXrôôôôôôôôôôôôôôleXXX native=solid; [node] 0/style: port=solid native=ellipse; [node] 0/shape: port=ellipse native=black; [node] 0/color: port=black native=lightgrey; [node] 0/fillcolor: port=lightgrey native= | oracle bug (A4): canon() use-after-free — output.c:103-108 agstrfree()s the agstrdup-ed refstr before the caller prints it, and _agstrcanon returns that pointer whenever no quoting is needed. Labels whose text is not otherwise pooled (latin1/entity-converted, differs from the raw attr bytes) hit refcnt 0 and are freed; the intervening printdouble allocations reuse the block, so native prints garbage/empty. Port prints the correct converted text. Journal 2026-07-24. |
graphs-Latin1 | 1 | [node] a/label: port=áâãäåæçèéêëìíîïðñòóôõöøùúûü native= | oracle bug (A4): canon() use-after-free — output.c:103-108 agstrfree()s the agstrdup-ed refstr before the caller prints it, and _agstrcanon returns that pointer whenever no quoting is needed. Labels whose text is not otherwise pooled (latin1/entity-converted, differs from the raw attr bytes) hit refcnt 0 and are freed; the intervening printdouble allocations reuse the block, so native prints garbage/empty. Port prints the correct converted text. Journal 2026-07-24. |
graphs-Symbol | 6 | [node] greek/label: port=αβγδεζηθικλμνξοπρςστυφχψωϒϖ native=; [node] o/label: port=infinity∞ native="p solid ellipse black lightgrey; [node] o/style: port=solid native=; [node] o/shape: port=ellipse native=; [node] o/color: port=black native= | oracle bug (A4): canon() use-after-free — output.c:103-108 agstrfree()s the agstrdup-ed refstr before the caller prints it, and _agstrcanon returns that pointer whenever no quoting is needed. Labels whose text is not otherwise pooled (latin1/entity-converted, differs from the raw attr bytes) hit refcnt 0 and are freed; the intervening printdouble allocations reuse the block, so native prints garbage/empty. Port prints the correct converted text. Journal 2026-07-24. |
share-Latin1 | 5 | [node] a/label: port=áâãäåæçèéêëìíîïðñòóôõöøùúûü native=solid; [node] a/style: port=solid native=ellipse; [node] a/shape: port=ellipse native=black; [node] a/color: port=black native=lightgrey; [node] a/fillcolor: port=lightgrey native= | oracle bug (A4): canon() use-after-free — output.c:103-108 agstrfree()s the agstrdup-ed refstr before the caller prints it, and _agstrcanon returns that pointer whenever no quoting is needed. Labels whose text is not otherwise pooled (latin1/entity-converted, differs from the raw attr bytes) hit refcnt 0 and are freed; the intervening printdouble allocations reuse the block, so native prints garbage/empty. Port prints the correct converted text. Journal 2026-07-24. |
windows-Latin1 | 1 | [node] a/label: port=áâãäåæçèéêëìíîïðñòóôõöøùúûü native= | oracle bug (A4): canon() use-after-free — output.c:103-108 agstrfree()s the agstrdup-ed refstr before the caller prints it, and _agstrcanon returns that pointer whenever no quoting is needed. Labels whose text is not otherwise pooled (latin1/entity-converted, differs from the raw attr bytes) hit refcnt 0 and are freed; the intervening printdouble allocations reuse the block, so native prints garbage/empty. Port prints the correct converted text. Journal 2026-07-24. |
Errors and timeouts (1)
| id | message |
|---|---|
1652 | oracle exit null |
Passing ids (754) are omitted for brevity — the full roster is in plain-parity-dot.json.