sfdp parity dashboard
Differential survey of @knowvah/dot-engine sfdp xdot output vs the native dot -K sfdp -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 sfdp && npx tsx test/corpus/parity-report.ts.
Summary
- Surveyed: 910 (generated 2026-07-31T00:23:37.832Z)
- pass: 619 (68.0%) · diverged (tracked): 0 · accepted (documented, won't-fix): 5 · accepted (A1-drift class): 285
- oracle-error: 0 · port-error: 0 · timeout: 1
Accepted deltas (5) — 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 | #diffs | class | bound | ref |
|---|---|---|---|---|
1879 | 17606 | A1 | up to 7.6kpt (whole-layout basin) | plans/decision-journal.md 2026-07-24 T5: sfdp chaos regime, same family as fdp 1879 |
2619_1 | 100 | A1 | 0.7-1.3pt on 6 nodes | plans/decision-journal.md 2026-07-24 T5: sfdp spring drift regime |
2556 | 54 | A6 | degenerate NaN layout: repulsiveforce=100 drives the spring-electrical solver to NaN in BOTH engines (the native oracle emits all-nan positions). Residual 54 diffs are NaN-garbage serialization only - C rounds NaN->int (bb -4.295e9 vs port 0) and suppresses NaN-spline edge draws (port emits them). No real layout exists on either side. The armPow throw + bezierClip NaN-hang that previously blocked rendering are fixed (C-faithful, NaN-only). | known-divergences.md#a6b-degenerate-nan-layout |
241_0 | 20 | A9 | flat-edge ptCount 14 vs 8 (3->2); same CDT/hypot tie as twopi/circo 241_0 (corridor succeeds N-pt vs plain fallback); findMaxDev hypot ULP | known-divergences.md#a9-sfdp-fp-ties |
42 | 200 | A9 | CDT cocircular incircle tie: opCount 5 vs 9 (0->3), ptCount 32 vs 26 (3->7); multispline corridor flip. fma+robust-incircle applied; residual is V8-vs-Apple-libm sin/hypot 1-ULP in the predicate input | known-divergences.md#a9-sfdp-fp-ties |
Accepted class: A1-drift — computed, not enumerated
Membership is computed at report time from the injection-attribution harness output (D2) — every diverged id whose native pre-routing position exonerates it (verdict: drift-exonerated) is subtracted from the Diverged table below and counted in Summary; an id that starts passing outright leaves the class silently on the next report regen.
- A1-drift: 287 members — full per-id evidence in
attribution-sfdp.json. Rationale: Known divergences.
Diverged (0)
(none)
Errors and timeouts (1)
| id | status | message |
|---|---|---|
2222 | timeout | ran 3600016ms, exceeded 3600000ms budget |
oracle errors: 7 native-crash (documented, excluded) / 0 timeout-flake (excluded this run, note to retry) Passing ids (619) are omitted for brevity — the full roster is in parity-sfdp.json.