# Browser QA

## Commands

```bash
node scripts/audit-static.mjs path/to/project
python3 scripts/audit-browser.py path/to/project
python3 scripts/render-courseware.py path/to/project path/to/evidence
```

## Automated measurements

- page count and order;
- console errors and failed requests;
- document and active-slide scroll overflow;
- descendants crossing the slide bounds;
- minimum visible font size;
- content occupancy that is suspiciously empty or overloaded;
- desktop, mobile, fullscreen-like, and print render completion.

## Human contact-sheet review

Automation cannot judge teaching rhythm. Inspect contact sheets at thumbnail scale for:

- repeated card grids;
- weak chapter transitions;
- titles with similar weight to body copy;
- diagrams whose connectors do not encode meaning;
- accidental brand/style drift;
- excessive blank space caused by missing content;
- dense pages that should be split;
- exercise pages without an obvious action.

Then inspect failed or suspicious pages at full resolution. Do not approve from the contact sheet alone.

## Pass rule

Packaging requires both `audit-static.json` and `audit-report.json` with `ok: true`. Never edit reports by hand to bypass a failure; fix the page and rerun.
