feat(adapter): make parity-lit — contract + visual parity (WHYNOT-WP-0002 T08)

Render every <wn-*> in a real browser (Playwright, --no-sandbox; reuses an
external static server when present) and write the adapter-contract parity result
to adapters/lit/parity/_parity.json:

- Contract parity: element must upgrade + carry no attribute-mismatch vs IR
  (computed statically via scaffold.componentDrift, avoiding runtime
  type-coercion false positives). prop-missing is a coverage note, not a failure.
- Visual parity: render smoke (non-empty + positive box) + per-component
  screenshot artifact (gitignored). Pixel-exact regression stays with the
  Playwright baseline suite; IR exemplars are gallery cards, not single-component
  baselines, so they are the human reference, not an auto pixel gate.
- Result: 10 components, contractFail=0 visualFail=0, PipelineStrip skipped
  (wn-pipeline-strip rename drift). Exit 4 on failure.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-30 09:16:13 +02:00
parent 552d8fe926
commit e4e3fe069c
5 changed files with 327 additions and 2 deletions

4
.gitignore vendored
View File

@@ -18,3 +18,7 @@ __pycache__
# Editor
.vscode
.idea
# Adapter parity render-smoke screenshots (regenerated by make parity-lit; the
# committed result is adapters/lit/parity/_parity.json)
adapters/lit/parity/*.png