Files
evening_detective_screen/docs/SCREEN-007_ACCEPTANCE.md
T
2026-10-18 03:11:10 +07:00

93 lines
9.6 KiB
Markdown

# SCREEN-007 — Аппаратная проверка устойчивости
Статус задачи остаётся IN_PROGRESS, пока нет результатов всей аппаратной матрицы.
Автоматический smoke подставляет события дисплея/питания и при синтетическом
мониторе также fullscreen. Native fullscreen остаётся для реального внешнего
дисплея. Renderer действительно завершается SIGKILL в отдельном процессе:
он проверяет обработчики, но не физические кабели, звук и предотвращение сна ОС.
## Стенд
Проверить macOS 13+ Intel/Apple Silicon, Windows 11 x64/ARM64, Linux x64/ARM64
на Ubuntu 24.04 LTS и Debian 13. На Linux под Wayland требуется XWayland.
Использовать реальный внешний дисплей в режиме расширенного рабочего стола,
проектные файлы WAV/MP3/OGG и H.264/AAC, проверяемые переходники и аудиоустройства.
1. Выполнить `npm ci`, `npm run media:generate`, `npm run dev` в каталоге screen.
2. Подготовить и выбрать игру по SCREEN-006_ACCEPTANCE.md; затем отключить сеть
для локальных проверок. Для синтетического WAV/видео доступен тестовый режим.
3. Пульт разместить на основном дисплее компьютера, показ открыть на внешнем.
Проверить сообщение «Автоматический сон заблокирован на время показа».
4. Перед каждым аварийным сценарием запустить медиа и таймер на несколько минут.
Для одновременной проверки обоих каналов включить музыку и вступление/видео.
Не использовать тестовый --mute-audio. Записать остальные флаги запуска.
## Дисплей и окно показа
- Отключить кабель проектора. Окно показа должно закрыться, оба канала остановиться,
работающий таймер — остаться на паузе с сохранённым остатком. В пульте видна
причина, блокировка сна выключена, сам пульт доступен на основном экране.
- Вернуть кабель. Показ не открывается и звук не запускается. Открыть показ
вручную: медиа остановлены, таймер на паузе. Отдельно продолжить таймер и медиа.
- Повторить со сменой разрешения, масштаба и ориентации выбранного внешнего
дисплея. Показ закрывается по той же политике; продолжение только вручную.
- Сделать выбранный дисплей основным средствами ОС: показ закрывается,
пульт остаётся доступен в рабочей области нового основного дисплея. Вернуть
основной дисплей компьютера и заново выбрать внешний.
- Выйти из fullscreen средствами ОС/Esc, если ОС это поддерживает. Показ
закрывается с аварийной паузой таймера. Простая потеря фокуса при работе
с пультом не должна закрывать показ.
- Нажать обычную кнопку «Закрыть показ»: медиа останавливаются, но уже работающий
таймер продолжает отсчёт — это прежняя политика явного закрытия.
- Если окно показа зависло, потеряло основной документ или его renderer упал,
оно закрывается, таймер ставится на паузу. Пульт должен оставаться доступен;
повторный показ открывается вручную. Программный smoke проверяет эти события,
включая настоящее принудительное завершение renderer; вызывать сбой драйвера
или ОС вручную не требуется.
## Сон и звук
- Временно задать короткое время автоматического выключения дисплея/сна в ОС.
Проверить, что при открытом показе компьютер и дисплей остаются активны
дольше этого интервала: во время воспроизведения, на паузе и на статичной обложке.
После закрытия показа/приложения прежний автоматический сон должен работать.
Вернуть исходные настройки питания после проверки.
- Принудительно отправить компьютер в сон, затем разбудить. Блокировка приложения
не отменяет принудительный сон и закрытие крышки. После пробуждения пульт
доступен, показ закрыт, звук сам не начинается, работающий таймер на паузе.
- Перед игрой выбрать выход ОС: macOS — настройки звука, «Выход»; Windows —
«Система → Звук»; Linux — настройки звука рабочего окружения. Проверить громкость,
mute и пробный пуск. Повторить с кабельным/USB-выходом и HDMI.
- После подключения/возврата HDMI проверить выбранный выход повторно: ОС может
автоматически переключить звук на проектор. Приложение не выбирает устройство
и не маршрутизирует звук на несколько выходов.
## Восстановление и сервер
1. Изменить размер/положение пульта, развернуть его, выбрать внешний дисплей
и игру. Закрыть приложение и снова запустить `npm run dev` с тем же профилем ОС.
Пульт восстанавливает размер/развёрнутое состояние в рабочей области основного
дисплея. Готовая игра доступна офлайн, показ закрыт, звук и таймер не запущены.
2. Повторить перезапуск с отключённым проектором и уменьшенным разрешением
основного дисплея. Пульт должен полностью помещаться в доступную область.
Внешний дисплей предвыбирается только при совпадении сохранённых ID и названия;
другой экран требуется выбрать вручную. Автоматического открытия нет.
3. Вернуть сеть и подключить управление игрой. После аварийного закрытия
отправить через сайт команду PLAY, затем восстановить и вручную открыть показ.
Пока окно закрыто, звука нет. После ручного открытия применяется текущая
серверная команда; повторные ответы её не перезапускают.
4. Закрыть приложение во время показа. Звук прекращается, блокировка сна
освобождается, материалы остаются на диске. При повторном запуске нет автопуска.
Выбранная игра сохраняется механизмом SCREEN-006, настройки окон — в отдельном
`windows.json` внутри userData. Повреждённые настройки окон заменяются безопасным
расположением и сообщением в пульте; пакеты и секреты при этом не удаляются.
## Отчёт
Для каждого стенда записать ОС/архитектуру, CPU/RAM, версию приложения/Electron,
режим рабочего стола (для Linux — X11 или XWayland), дисплей, кабель/переходник,
аудиовыход, форматы, результаты каждого пункта и наблюдаемые сбои. Не передавать
пароли, токены и файлы секретов. Аппаратные задержки пуска относятся к
SCREEN-001/SCREEN-004; эта проверка не подтверждает p95 ≤150 мс на M1.