# П56 · 2022-10 · Проверки пользовательского сценария — три прохода саморевью ## Рамка пакета - Slug: `editorial-2022-10-practice-ui-tests`, `editorial-2022-10-mechanism-ui-tests`, `editorial-2022-10-field-ui-tests`. - Голос: М5, начало 2022 года; короткая прагматичная техническая речь. Объект разбора — один flaky e2e-паттерн: произвольный wait после действия вместо наблюдаемого условия. - Граница: package не запускает браузер, Playwright, WebDriver, DOM, таймер, сеть, selector, trace или метрику. Fixture — только deterministic in-memory transition model; `requestId` и acknowledgement — учебные значения. - Sidecar содержит ровно пять новых файлов. Registry, README, `articles.json`, очередь, Git и предыдущие месяцы не менялись. ## Проход 1 — факты и техника - Источники проверены как первичные/официальные и доступные к октябрю 2022 года: immutable [Playwright assertions commit af0d2936 от 07.10.2022](https://github.com/microsoft/playwright/blob/af0d2936ac6e8780214c251ff58a5e7d6eba41ca/docs/src/test-assertions-js.md), [W3C WebDriver Working Draft 25.10.2022](https://www.w3.org/TR/2022/WD-webdriver2-20221025/) и [датированная WCAG 2.1 Recommendation 05.06.2018](https://www.w3.org/TR/2018/REC-WCAG21-20180605/). В тексте статус WD указан именно как Working Draft; documentation commit не назван текущей документацией. - Убрана ложная логика: прошедшая секунда не считается готовностью, а локальный acknowledgement не называется ответом сервера. Retrying assertions у Playwright описаны только как ожидание выбранного condition до timeout; выбор condition остаётся задачей UI-contract. - Независимая правка редактора: первоначальный rollback возвращал и счётчик запросов, из-за чего новая попытка повторно получала `request-01` и теоретически могла принять поздний ответ первой попытки. Теперь rollback возвращает только pre-submit UI-снимок с черновиком, но сохраняет монотонный счётчик: вторая попытка получает `request-02`, а старый acknowledgement явно отклоняется. - `runUiTestsFixture()` проверяет четырнадцать свойств только локальной модели: boundary без browser/timer, named pending state, submit guard, stale acknowledgement, recovery, сохранение черновика без ложного success при rollback, монотонность request id, accepted и duplicate reply. Нет assertion о реально запущенном UI или статистике. ## Проход 2 — голос, полнота и объём - Первые два абзаца каждой статьи дают проблему и цену: arbitrary wait даёт флак, ложный зелёный CI и диагностику без наблюдаемого перехода. - Маршрут в каждой статье строится как «симптом → причина → проверка → действие», с отдельной границей, rollback и следующим шагом. Есть таблица, нумерованный маршрут, исполнимый code/example, figure с alt/caption и проверяемые источники. - Размер проверяется внутри revision builder без списка источников: 6 498 / 7 291 / 7 403 знака; audit подтверждает диапазон 5 000–15 000 и минимум 8 минут чтения. ## Проход 3 — визуал, безопасность и выпуск - SVG разделяют вопросы: state contract, intent/transition/observation и diagnosis/rollback. В них нет `script`, `foreignObject`, внешних URL, `data:image` или интерактивного поведения. - После независимой правки повторно выполнены `node --check web/scripts/upgrade-2022-10.mjs` — PASS; `node web/scripts/upgrade-2022-10.mjs --verify-fixture` — PASS 14/14; `cd web && npm run audit:draft -- scripts/upgrade-2022-10.mjs` — PASS; import-safe export без `date`/`author`, XML-проверка, safety scan и Sharp-review всех трёх SVG на ширине 375 px — PASS. Детали относятся только к sidecar и не являются публикацией. - При приёмке пакет добавлен в registry поверх исходных slug; `articles.json`, даты и автор не менялись. README обновлён с 169 до 172 принятых материалов из 358. Чужие sidecar-файлы не затрагивались. ## Интеграционная приёмка - Строгий аудит опубликованного overlay прошёл для всех трёх slug: 6 498 / 7 471 / 7 467 знаков, по одной figure, table и code example. Отдельная проверка merge подтверждает исходные даты и автора `DarkRiDDeR` для всех трёх записей. - `npm run build` в `web/` завершился успешно: production-сборка сгенерировала 374 статические страницы. Неподдерживаемые локальные npm-конфигурации выдали только предупреждения; TypeScript и Next.js завершились без ошибки. - Перед commit дополнительно требуется только `git diff --check`, проверка точного списка staged-файлов и проверка отношения к `origin/master`; reset и перезапись архива не применялись.