# P66 — август 2023: стабильные e2e-тесты ## Граница пакета Подготовлены только пять sidecar-файлов для последующей интеграции главным агентом: - `web/scripts/upgrade-2023-08.mjs`; - `editorial/reviews/2023-08-draft.md`; - `web/public/assets/editorial/2023/e2e-stability-2023-flake-classification.svg`; - `web/public/assets/editorial/2023/e2e-stability-2023-wait-contract.svg`; - `web/public/assets/editorial/2023/e2e-stability-2023-triage-loop.svg`. Три замены используют точные archive slug и не содержат `date` или `author`: | Slug | Роль | Основной текст | | --- | --- | ---: | | `editorial-2023-08-practice-e2e-stability` | практический маршрут | 9 694 знака | | `editorial-2023-08-mechanism-e2e-stability` | модель контрактов | 9 423 знака | | `editorial-2023-08-field-e2e-stability` | triage и rollback | 9 443 знака | Registry, README, `articles.json`, очередь, Git и файлы других агентов не менялись. Пакет не коммитился и не пушился. ## Историческая опора Все источники являются официальными и были доступны к концу августа 2023: - [Playwright v1.37.0](https://github.com/microsoft/playwright/releases/tag/v1.37.0) — опубликованный GitHub release от 10 августа 2023. - [Auto-waiting, тег v1.37.0](https://raw.githubusercontent.com/microsoft/playwright/v1.37.0/docs/src/actionability.md) — для `click` перечислены attached, visible, stable, receives events и enabled; это actionability target, не бизнес-успех. - [Retries, тег v1.37.0](https://raw.githubusercontent.com/microsoft/playwright/v1.37.0/docs/src/test-retries-js.md) — при failure worker с браузером отбрасывается, retry идёт в новом worker; `flaky` описывает failed → passed, а не причину различия. - [Trace Viewer, тег v1.37.0](https://raw.githubusercontent.com/microsoft/playwright/v1.37.0/docs/src/trace-viewer.md) — записанный trace включает actions, snapshots, action log, source и network log; `on-first-retry` относится к первому retry. - [Best Practices, тег v1.37.0](https://raw.githubusercontent.com/microsoft/playwright/v1.37.0/docs/src/best-practices-js.md) — изоляция, user-facing locator и web-first assertions. ## Саморевью 1 — факты и модель - Разведены selector, actionability, readiness condition, retry и evidence. Уникальный locator и успешный `click` нигде не выдаются за подтверждение продуктового результата. - `failed → passed` назван статусом двух попыток; не утверждается, что это реальный flake, причина сбоя, медленная сеть или совместимость браузера. - Trace описан как evidence конкретной записанной попытки. В текстах нет заявления, что был открыт настоящий trace, video, browser или CI-report. - Fixture создаёт только marked synthetic objects в памяти. У него нет URL, реального `trace.zip`, video, duration, browser name, файлового чтения, запуска Playwright или обращения к сети. Он не оценивает настоящий флак, время или compatibility. - Отрицательные ветки отделяют множественный selector от отсутствующего readiness, отвергают расходящуюся retry-policy и подмену synthetic evidence реальным artefact. План запрещает увеличивать timeout или переписывать selector без evidence и требует condition, совпадающий с evidence. ## Саморевью 2 — голос, полнота и объём - Голос М6 соответствует 2023 году: спокойная системная практика без неподтверждённого опыта управления всей организацией. Утверждения привязаны к контракту, попытке, owner, rollback и следующей проверке. - Первые два абзаца каждой статьи называют проблему и цену: retry маскирует первый отказ, а общий timeout ухудшает обратную связь. - В каждой статье есть доступная таблица, самостоятельный SVG с содержательным `alt` и подписью, исполнимый fixture, ordered route «симптом → причина → проверка → действие», ограничения и следующий шаг. - Проверен объём основного текста без списка источников: 9 694, 9 423 и 9 443 знака — внутри требуемых 5 000–15 000 и целевого практического диапазона около 8–10 тысяч. - Убраны обобщения без объекта. Timeout назван верхней границей ожидания, а не readiness condition; trace не назначен заменой причинного анализа. ## Саморевью 3 — визуал, безопасность и выпуск - Все три SVG прошли XML-проверку. Safety scan не нашёл `script`, `foreignObject`, `javascript:`, `data:image` и event-handler attributes. - Каждый SVG отрендерен Sharp при ширине 375 px. На визуальном проходе проверены контраст, отсутствие обрезания текста, стрелки переходов и читаемость ключевых развилок: selector/readiness/retry/evidence. - Автоматический аудит подтвердил slug, import-safe CLI/export, отсутствие `date`/`author`, объём, таблицы, figure/caption, пример, ordered route, источники и наличие visual assets. - Production build и registry-аудит намеренно не выполнялись: это sidecar без интеграции, и их выполняет главный агент после добавления revisions в общий registry. ## Выполненные команды | Команда | Результат | | --- | --- | | `node --check web/scripts/upgrade-2023-08.mjs` | PASS | | `node web/scripts/upgrade-2023-08.mjs --verify-fixture` | `PASS fixture: 18/18 assertions` после независимого model review | | `npm run audit:draft -- scripts/upgrade-2023-08.mjs` из `web/` | PASS для трёх slug | | import-safe import без `date`/`author` | `PASS import-safe: 3 revisions without date/author` | | `xmllint --noout` для трёх SVG | PASS | | SVG safety scan | PASS, совпадений нет | | Sharp render 375 px для трёх SVG | PASS, выполнен визуальный проход | ## Интеграционное ревью главного агента Проведён отдельный проход после передачи sidecar. Проверены первоисточники Playwright по тегу `v1.37.0`: actionability для `click` не равна продуктовому readiness; retry запускается в новом worker; `flaky` означает только `failed → passed`; `on-first-retry` относится к записи trace первого retry. Эти границы оставлены в тексте и в fixture, а не заменены общими обещаниями «стабильности». Model review нашёл две скрытые возможности подмены вывода. Классификатор теперь принимает только согласованную retry-policy: начальная и первая повторная попытки обе должны быть частью одной настройки с `configuredRetries = 1`. План изменения readiness теперь обязан использовать в точности condition из evidence; нельзя собрать правильную классификацию и затем предложить другое ожидание. Добавлены отрицательные fixture-сценарии для обоих случаев. Повторные результаты: `node --check` — PASS, fixture — `18/18`, черновой аудит — 9 694 / 9 655 / 9 562 знака, строгий archive audit — PASS для трёх archive slug. Registry содержит 193 уникальные ревизии. XML и safety scan визуалов чисты; три PNG-рендера при 375 px просмотрены вручную. `npm run build` сгенерировал 374 статические страницы без ошибки. ## Ограничение при передаче Этот пакет не является доказательством стабильности существующих e2e-тестов. Главному агенту при интеграции нужно добавить только эти три revisions в общий overlay, затем выполнить строгий archive audit и production build в контексте репозитория. Реальные trace, browser run, CI-данные, flake rate и browser compatibility остаются за пределами sidecar.