From 0df17b2948f08441f7f611314752842253fe0f4d Mon Sep 17 00:00:00 2001 From: alowpoly Date: Fri, 17 Jul 2026 19:41:44 -0300 Subject: [PATCH] feat: add Visual Parity Oven and engine identity --- dashboard/src/App.tsx | 6 +- .../src/components/AppHeader/AppHeader.tsx | 3 +- .../components/VisualParity/VisualParity.tsx | 110 ++++++++++++++++ .../src/components/VisualParity/index.ts | 1 + dashboard/src/components/index.ts | 1 + dashboard/src/hooks/index.ts | 1 + dashboard/src/hooks/useVisualParityData.ts | 42 ++++++ dashboard/src/index.css | 1 + dashboard/src/lib/hrefs.ts | 3 +- dashboard/src/lib/index.ts | 2 + dashboard/src/lib/visual-parity.ts | 67 ++++++++++ .../differential-testing-data-contract.mjs | 24 +++- ...ifferential-testing-data-contract.test.mjs | 22 ++++ ...erential-testing-transport-server.test.mjs | 8 ++ .../engine/differential-testing-transport.mjs | 16 ++- .../differential-testing-data.schema.json | 10 ++ ovens/visual-parity/detail.json | 41 ++++++ .../engine/visual-parity-contract.mjs | 122 ++++++++++++++++++ .../engine/visual-parity-contract.test.mjs | 101 +++++++++++++++ .../engine/visual-parity-handler.mjs | 73 +++++++++++ ovens/visual-parity/instructions.md | 7 + .../visual-parity/renderer/visual-parity.css | 107 +++++++++++++++ package.json | 1 + scripts/verify-package.mjs | 5 + scripts/verify-test-files.mjs | 1 + scripts/verify.mjs | 7 +- src/ovens/built-in-handlers.mjs | 1 + 27 files changed, 775 insertions(+), 8 deletions(-) create mode 100644 dashboard/src/components/VisualParity/VisualParity.tsx create mode 100644 dashboard/src/components/VisualParity/index.ts create mode 100644 dashboard/src/hooks/useVisualParityData.ts create mode 100644 dashboard/src/lib/visual-parity.ts create mode 100644 ovens/visual-parity/detail.json create mode 100644 ovens/visual-parity/engine/visual-parity-contract.mjs create mode 100644 ovens/visual-parity/engine/visual-parity-contract.test.mjs create mode 100644 ovens/visual-parity/engine/visual-parity-handler.mjs create mode 100644 ovens/visual-parity/instructions.md create mode 100644 ovens/visual-parity/renderer/visual-parity.css diff --git a/dashboard/src/App.tsx b/dashboard/src/App.tsx index dc26d7b..e124a11 100644 --- a/dashboard/src/App.tsx +++ b/dashboard/src/App.tsx @@ -1,6 +1,6 @@ import { useMemo, useState } from "react"; import { Clock3, ListChecks } from "lucide-react"; -import { AppHeader, ChecklistDashboard, DashboardError, DifferentialTestingPage, EmptyState, FILTERS, Filters, NewOvenPage, ProjectGroup, RunBurnPage, StreamingDiff } from "@components"; +import { AppHeader, ChecklistDashboard, DashboardError, DifferentialTestingPage, EmptyState, FILTERS, Filters, NewOvenPage, ProjectGroup, RunBurnPage, StreamingDiff, VisualParityPage } from "@components"; import { useDashboardData } from "@hooks"; import { currentSection, filterFromUrl, listHref, selectedBurnlist } from "@lib"; import type { Filter } from "@lib"; @@ -24,8 +24,8 @@ export function App() { return (
-
- {section === "differential-testing" ? : section === "performance-tracing" ? : section === "streaming-diff" ? : section === "new-oven" ? : section === "run-burn" ? : selected ? ( +
+ {section === "differential-testing" ? : section === "performance-tracing" ? : section === "streaming-diff" ? : section === "visual-parity" ? : section === "new-oven" ? : section === "run-burn" ? : selected ? ( error ? : loading && !progress ? : progress ? ( ) : diff --git a/dashboard/src/components/AppHeader/AppHeader.tsx b/dashboard/src/components/AppHeader/AppHeader.tsx index 6d6b21c..80dfe1a 100644 --- a/dashboard/src/components/AppHeader/AppHeader.tsx +++ b/dashboard/src/components/AppHeader/AppHeader.tsx @@ -15,8 +15,9 @@ export function AppHeader({ section }: { section: string }) { {section === "differential-testing" &&
Differential Testing
} {section === "performance-tracing" &&
Performance Tracing
} {section === "streaming-diff" &&
Streaming Diff
} + {section === "visual-parity" &&
Visual Parity
}