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

View File

@@ -34,6 +34,9 @@ ir: ## Extract the technology-neutral IR (ir/) from the designbook mirror. One-w
adapt-lit: ## Project the IR onto the Lit stack: regen tokens (full gen), scaffold + drift (T07).
$(NODE) adapters/lit/adapt.mjs
parity-lit: ## Confirm Lit elements honour the IR contract + render (browser). Exit 4 on parity failure.
$(NODE) adapters/lit/parity.mjs
recent-changes: ## Regenerate RecentChanges.md (alias of the reporter; --range supported).
$(NODE) scripts/designbook-sync.mjs $(ARGS)