A deliberately-unfinished second adapter that consumes the same ir/ and honours
the same adapters/ADAPTER_CONTRACT.md (token full-gen + write-once stubs + drift
roll-up shape + exit codes), with zero changes to ir/. Every IR component is
'new' for a fresh stack → 10 class stubs + tokens.css (80 props). Not a usable
plain-CSS kit — the deliverable is confidence the boundary holds so the
architecture can be lifted into a coulomb-level tool later. make adapt-plain-css.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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>
Extend make adapt-lit beyond tokens: parse src/elements/*.js, compare each IR
component contract against its <wn-*> element, and emit per-component drift
reports + a machine roll-up (adapters/lit/drift/), with write-once stubs
(adapters/lit/stubs/) for genuinely new components. Never overwrites
hand-authored sources.
- Severity split: actionable drift (prop-missing, attribute-mismatch,
variant-axis-missing, tag-mismatch) gates with exit 3; non-portable + prop-extra
are informational (the IR carries React style/onClick; Lit is richer than the
minimal designbook) and don't gate.
- Current state: 7 ok, 3 actionable drift for human triage — PipelineStrip
(wn-pipeline-strip vs hand-authored wn-pipeline rename), PageHeader (actions is
a slot, not a prop), Sidebar (IR 'current' axis absent on the element).
- _report.json reuses generatedAt/irRef when drift is unchanged (no git churn).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>