This commit is contained in:
2026-10-17 19:52:24 +07:00
parent a386f3d9e5
commit f5dc9c1e5b
17 changed files with 1652 additions and 59 deletions
+54 -7
View File
@@ -1,7 +1,7 @@
# Вечерний детектив — приложение площадки
Статус: программная часть SCREEN-004 реализована; SCREEN-001 и SCREEN-004
остаются IN_PROGRESS до аппаратной приёмки.
Статус: SCREEN-005 реализована; SCREEN-001 и SCREEN-004 остаются IN_PROGRESS
до аппаратной приёмки. Режимы показа и пульт работают с локальными пакетами.
SCREEN-002 и SCREEN-003 завершены: описание пакета через существующий API,
загрузка, проверка, восстановление и локальная выдача файлов.
Управление с телефона идёт через существующий сервер сайта; desktop получает
@@ -22,7 +22,8 @@ macOS Intel/Apple Silicon, Windows x64/ARM64 и Linux x64/ARM64.
общего правила хранения задач в `../docs/agent`. Не дублировать их там.
Идентификаторы `SCREEN-*` относятся только к этому приложению.
Текущий этап: SCREEN-004; программная часть готова, аппаратная проверка открыта.
Следующий этап: SCREEN-006 — авторизация, загрузка через интерфейс и серверная
синхронизация; аппаратная проверка SCREEN-004 остаётся открытой.
Новые задачи: `Новая задача: <описание>`.
Commit и push выполняет только пользователь. Вложенные `.git` не изменять.
@@ -44,8 +45,8 @@ npm run dev
его и откройте показ. Аудио и видео — синтетические локальные файлы длительностью
60 секунд; бинарники находятся в игнорируемом fixtures/ и не входят в Git.
Тестовый режим сохраняет отдельный выбор WAV/видео; игровые пакеты выбираются
в разделе «Материалы показа». Полные игровые
режимы, интерфейс загрузки игр и авторизация пока не реализованы.
в разделе «Материалы показа». Интерфейс загрузки игр и авторизация пока
не реализованы; они относятся к SCREEN-006.
Управление телефоном через сервер, подключение игры и авторизация относятся к
SCREEN-006 и в техническом стенде ещё не реализованы. Интернет нужен для получения
@@ -179,5 +180,51 @@ URL, независимо от исходного имени файла. Лок
`dist-electron`, из которого Electron загружает preload при открытии окна.
Программные замеры в пульте разделены по каналу и текущему виду медиа; они
не измеряют физический звук/первый кадр. Аппаратная приёмка, остальные ОС,
реальные игровые материалы и p95 на M1 пока не подтверждены. Полные визуальные
режимы остаются в SCREEN-005, авторизация и получение серверных команд — в SCREEN-006.
реальные игровые материалы и p95 на M1 пока не подтверждены. Все восемь визуальных режимов доступны в SCREEN-005; авторизация и получение
серверных команд остаются в SCREEN-006.
## Пульт и режимы SCREEN-005
Пульт включает готовый пакет, план шагов, переключатель восьми режимов, текст,
таймер, предпросмотр и прежние независимые каналы медиа/музыки. План из пакета
доступен только для чтения. Выбор шага применяет его параметры без автоматического
запуска звука/таймера; окончание медиа не переключает шаг. Пуск основного ресурса
показывает соответствующий режим вступления или видео. Уход в другую сцену
останавливает основной канал, сохраняя независимую музыку.
Текст и параметры таймера редактируются как черновик; только «Показать текст» /
«Показать таймер» публикуют их. Текст отображается как обычный текст, без HTML.
Таймер вычисляется в основном процессе по монотонному deadline; интервалы только
обновляют снимок. Пауза сохраняет точный остаток, сброс возвращает полную длительность.
Таймер продолжает идти за другой сценой и при закрытом окне; смена пакета сбрасывает
его. По окончании остаётся 00:00, без сигнала и смены режима. Восстановление после
сна/перезапуска относится к SCREEN-007.
Обложка и фон читаются через локальный протокол. Новая подготовка использует
адрес с идентификатором сцены, исключая устаревший декодированный кеш изображения.
Окно подтверждает готовность по загрузке изображений/медиа; запоздалые подтверждения
прошлой сцены/сессии игнорируются. Сообщения об ошибках доступны только пульту.
На проекторе остаются материалы игры и предусмотренные состояния отсутствия
необязательного вступления/видео/результатов, без кнопок и диагностических текстов.
Предпросмотр — кадры настоящего окна через capturePage, максимум два в секунду,
шириной не более 960 px. В пульте нет второго audio/video. Захват недоступен окну
показа, при закрытом проекторе/скрытом или свёрнутом пульте прекращается; старые
кадры другой сцены/сессии не принимаются. Хранится только последний кадр.
Системные шрифты с кириллицей не требуют сети.
`Controller.setResults(snapshot)` принимает снимок текущей игры: packageKey,
capturedAt, вопросы и публичные строки таблицы (ID/название команды, место,
сумма, ходы и баллы ответов). Лишние поля отбрасываются, другой ключ игры,
повторные команды/вопросы и некорректные значения отклоняются. На пульте указан
момент снимка. При его отсутствии показывается «Результаты пока не загружены»;
фиктивные результаты в приложении не создаются. Длинная таблица прокручивается
снизу вверх, обновления позиций медиа её не перезапускают. Сетевое получение и
сохранение снимка реализуются в SCREEN-006; публичного IPC редактирования результатов нет.
`npm run acceptance` теперь создаёт локальный пакет с обложкой, фоном и восемью
шагами; [инструкция SCREEN-005](docs/SCREEN-005_ACCEPTANCE.md) описывает полный
офлайн-проход. Автоматический smoke проверяет также повреждение/восстановление
изображения, отсутствие второго звука, предел частоты кадров предпросмотра,
кириллицу и отрисовку/прокрутку 50 синтетических строк результатов. Эти строки
подаются только в тестовый renderer и не сохраняются в состоянии приложения.