# Пробы гарда исключений (#404) Здесь лежат фикстуры, которые **должны падать**: каждая проверяет, что гард «uncaught exception внутри карточки» умеет краснеть, а не только объявлен. Три причины, по которым это отдельный каталог, а не `demo/smoke_*` и не `demo/fixtures/`: 1. **Не `smoke_*`** — иначе шарды CI будут гонять заведомо красный файл и покрасят себя. 2. **Не `demo/fixtures/`** — этот каталог входит в корпус `sourceFingerprint` (`scripts/source-fingerprint.mjs`), то есть каждый новый `.mjs` там объявляет устаревшими закоммиченный бандл, скриншот-индекс документации и golden-индекс. Пробы гарда ни одного пикселя не касаются, платить пересъёмкой за них нечем. 3. **Каталог, а не файл** — проб несколько, и они читаются как набор. Запускает их `verify-guard.mjs`; он же вызывается из job «Смоки в браузере» и служит guard'ом мутантов в `scripts/mutation-gate.mjs`. Одна проба живёт не здесь: `--guard-probe` у `demo/benchmark_backdrop_decode.mjs` (#430). Benchmark нельзя переселить в этот каталог — его запускают руками при рекалибровке порогов, — поэтому `verify-guard.mjs` умеет запускать файл выше каталога и с аргументами. Режим `--guard-probe` пропускает все замеры, бросает одно исключение внутри страницы и обязан выйти с кодом 1. Новый benchmark, открывающий страницу Playwright, обязан получить такой же режим и запись здесь: этого требует `test/smoke-harness-contract.test.mjs`, и требует статически — потому что динамическое доказательство возможно только там, где есть браузер.