# Правила приёмки живого E2E для кодинг-агента

Это шаблон задания исполнителю и независимому проверяющему, НЕ механизм блокировки.
Сам markdown не защищает тесты от изменения и не удостоверяет выполнение команд.
Владелец должен отдельно ограничить права исполнителя на приёмочные тесты и CI.

## До работы: заполнить вместе с владельцем

- Проверяемое действие пользователя: <одно действие или законченный сценарий>.
- Реальное последствие: <запись в хранилище / процесс / файл / состояние сервера>.
- Как независимо прочитать последствие: <API чтения / запрос к БД / серверная команда>.
- Среда: <браузер + живой API / упакованный GUI / симулятор / физическое устройство>.
- Команда приёмочного теста: <фиксированная команда и ожидаемый набор тестов>.
- Идентификатор сборки: <коммит, конфигурация, digest артефакта если есть>.
- Изоляция: <одноразовые тестовые данные, отдельный стенд, один управляющий устройством>.
- Чувствительные операции и разрешения: <что разрешено и кто подтверждает>.

## Исполнителю

1. Проследи путь от UI-действия до production-обработчика. Проверь fixtures,
   перехваты запросов и IPC. Ответ из таблицы, route.fulfill или подставленный callback
   не является ответом рабочего бэкенда. Перехват, который передаёт запрос реальному
   обработчику, должен сохранять его результат и ошибку, а не подменять их.
2. Подними согласованную изолированную среду. Не используй чужую сессию или устройство,
   уже занятое другим прогоном. Разрешения на доступ к данным не расширяй ради теста.
3. Выполни действие через интерфейс. Прямой вызов API можно применять для подготовки
   или проверки результата, но он не заменяет нажатие, если приёмка касается кнопки.
4. Прочитай последствие независимо от состояния UI. «Кнопка исчезла» не доказывает
   завершение серверного процесса. Сверь конечное состояние и отсутствие лишних эффектов.
5. При отсутствии сервера, устройства, разрешения или нужного теста запиши
   NOT COLLECTED и причину. Ноль выполненных проверок не даёт PASS.
6. Сохрани исходный вывод и настоящий exit code. Если вывод обрезается для показа,
   делай это после сохранения кода возврата; не выдавай код tail/grep за код теста.
7. Зафиксируй версию ДО запуска и проверь её ПОСЛЕ. Для приёмки используй чистый
   согласованный checkout: новый коммит или изменение исходников требует нового прогона.
8. Не меняй согласованные ожидания, не отключай тесты и не подставляй успешный ответ,
   чтобы пройти проверку. Ошибка в самой приёмке — отдельное решение владельца.

## Независимому проверяющему

- Проверь изменение тестов относительно согласованной версии, включая конфиг и fixtures.
- Выполни приёмочную команду сам на принимаемой сборке. Проза и JSON исполнителя
  указывают, где искать доказательства, но сами доказательством не являются.
- Проверь, что нужные сценарии действительно исполнились, а не были пропущены.
- Убедись, что наблюдаемый результат получен от настоящего сервера/устройства.
- Для исправления дефекта воспроизведи падение на предыдущей версии и успех на новой
  в одинаковой среде. Если это невозможно, явно запиши ограничение.
- Рекомендуется безопасный отрицательный контроль: отключи нужный backend-эффект
  в изолированной копии и убедись, что тест это ловит. Восстанови среду после проверки.

## Отчёт

- Сборка и среда: <что именно проверено>.
- Команда: <точный вызов без токенов и паролей>.
- Выполненные сценарии: <список и число>; пропуски: <список и причины>.
- Входное действие → наблюдение снаружи: <данные до и после>.
- Результат: PASS / FAIL / NOT COLLECTED, с причиной.
- Сырые артефакты и логи: <локальные пути>; приватные данные удалены.
- Независимый повтор: <кто/какой runner, версия, результат>.
- Не проверено: <честные границы; WebKit на Mac не выдавать за физический iPhone>.

PASS относится только к перечисленным действиям, сборке и среде.
Он не означает, что проверены все клики, все сети и все устройства.
