--- name: site-check description: Check the landing page and the generated documentation site (site/, guardana.dev) in a real browser — confirm a page renders after a docs change, review it at phone width, read the console and network for anything that contradicts the no-telemetry promise, collect screenshots as evidence. Use after any change under site/, docs/ or scripts/sitegen/, and before a push that deploys the site. argument-hint: "[page or path] [local | live]" --- # Site check in a real browser Target: $ARGUMENTS Delegate the clicking to the `browser` agent (page snapshots are large); keep its findings here. Tools: the Playwright MCP (`browser_navigate`, `browser_snapshot`, `browser_resize`, `browser_console_messages`, `browser_network_requests`, `browser_take_screenshot`). ## Serve it locally — what Cloudflare serves, byte for byte ```bash uv run python scripts/build_site.py # rebuild site/docs/ from docs/ (or --check) python3 -m http.server -d site 8099 # http://localhost:8099/ ``` | page | what to check there | |---|---| | `/` | the landing page: the counts (`sync_site.py --check` says they are current), the terminal demo, every link resolves | | `/docs/` | the documentation home: the sidebar mirrors `docs/index.md`, every section has its pages | | `/docs/usage-scan.html` (any usage page) | fenced commands render as code, tables fit at 400 px, the status badge matches the page's front matter | | `/docs/generated/rule-catalog.html` and one rule page from the explorer | the rule count, taxonomy links, no "do not edit" marker leaking into the page | Live (`https://guardana.dev`): look only. There is nothing to log into and nothing to submit. ## What a pass covers 1. The page renders with its real content — no empty section, no raw markdown, no missing generated block. A blank where a count belongs is a finding, not an empty state. 2. Console errors and failed requests after each page. **Any request to a host other than the page's own is a finding**: the site promises no telemetry and ships a closed Content-Security-Policy in `site/_headers`. 3. Desktop and **400 px**: nothing cut off, no horizontal page scroll, code blocks scroll inside themselves, the sidebar collapses. 4. Keyboard: links reachable in order, visible focus. 5. Screenshots of the changed pages (before/after when fixing a bug) saved to the scratchpad; attach the paths to the report, and to the commit body when they are evidence. A site change is not done until `uv run python scripts/build_site.py --check` and `uv run python scripts/generate_llms_txt.py --check` are clean — the hook refuses a push to `main` otherwise, because the push is the deploy.