Files
whynot-design/Makefile
tegwick e4e3fe069c 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>
2026-06-30 09:16:13 +02:00

52 lines
2.5 KiB
Makefile

# whynot-design — automation targets. Run `make` (or `make help`) for the list.
#
# The designbook (Claude Design project) mirrors into this repo at designbook/.
# It is pulled with the `/design-sync` skill in Claude Code — component by
# component, never a wholesale replace — which is an agent step, not a shell one.
# After a sync, `make designbook-sync` captures what changed into RecentChanges.md.
NODE ?= node
# Prefer the llm-connect venv (where llm_connect is installed); fall back to python3.
PYTHON ?= $(shell [ -x $(HOME)/llm-connect/.venv/bin/python ] && echo $(HOME)/llm-connect/.venv/bin/python || echo python3)
.DEFAULT_GOAL := help
.PHONY: help designbook-pull designbook-sync designbook-check ir adapt-lit recent-changes sync-styles test release
help: ## Show this help.
@grep -hE '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) \
| awk 'BEGIN{FS=":.*?## "}{printf " \033[1m%-16s\033[0m %s\n", $$1, $$2}'
designbook-pull: ## Pull the React designbook from Claude Design into designbook/ (cloud -> local mirror).
$(PYTHON) scripts/designbook_pull.py $(ARGS)
designbook-sync: ## After a designbook pull, record what changed + last-sync time into RecentChanges.md.
@echo "Pull the designbook first (in Claude Code): /design-sync"
@echo " then record the pull time: node scripts/designbook-sync.mjs --mark-synced"
@echo "This reports the diff + last /design-sync time (and warns if the cloud is newer):"
$(NODE) scripts/designbook-sync.mjs
designbook-check: ## Ask Claude Design (via llm-connect) if the cloud is newer; warn if the mirror is stale.
$(PYTHON) scripts/check_designbook_staleness.py $(ARGS)
ir: ## Extract the technology-neutral IR (ir/) from the designbook mirror. One-way: React -> IR.
$(NODE) scripts/ir-extract.mjs
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)
sync-styles: ## Regenerate src/elements/_styles.js from components.css.
$(NODE) scripts/sync-shared-styles.mjs
test: ## Run the Playwright visual-regression suite.
pnpm test:visual
release: ## Cut a release: bump + cut CHANGELOG + tag. Usage: make release VERSION=0.3.0
@test -n "$(VERSION)" || { echo "usage: make release VERSION=x.y.z"; exit 2; }
$(NODE) scripts/release.mjs $(VERSION)