# Tests Run everything from the repo root: ``` uv run --with pytest --with playwright pytest tests ``` - `test_*.py`: assert-based self-checks for template logic (lint of unfilled Python templates, the custom palette, presets in step with the template). - `page_check/`: **Seam 1.** Loads a dashboard page in headless Chromium with no backend, pushes contract envelopes through `window.__pyMsg`, and asserts on what is visible. Every case runs in light, dark and narrow (800px) mode. - By default it checks the no-AI template, filled with test values. To check a generated page instead, set `PAGE_CHECK_HTML=path/to/dashboard.html`. - The page sees a fake Qt bridge. Every action the page sends is recorded in `window.__calls` as `[slot, ...args]`. - To add a case, write a `test_*.py` file in `page_check/` that uses the `page` and `push(event, data)` fixtures from `conftest.py`. - `evals/`: **Seam 2.** Runs the skills on a fixture project with `claude -p`, then grades the reply and runs the page check on the page it built: ``` uv run --with pytest --with playwright python tests/evals/run_eval.py a-empty ``` Results go to `evals/results/.json`. To add a fixture, add an entry to `FIXTURES` in `run_eval.py`. - `fixtures/-/`: small test projects for the evals.