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

9.6 KiB

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.