This commit is contained in:
2026-10-17 20:16:24 +07:00
parent f5dc9c1e5b
commit 40456eebf1
16 changed files with 2122 additions and 54 deletions
+23 -16
View File
@@ -1,11 +1,10 @@
# Вечерний детектив — приложение площадки
Статус: SCREEN-005 реализована; SCREEN-001 и SCREEN-004 остаются IN_PROGRESS
до аппаратной приёмки. Режимы показа и пульт работают с локальными пакетами.
SCREEN-002 и SCREEN-003 завершены: описание пакета через существующий API,
загрузка, проверка, восстановление и локальная выдача файлов.
Управление с телефона идёт через существующий сервер сайта; desktop получает
обновления с сервера. Прямое LAN-подключение не используется.
Статус: SCREEN-006 реализована — вход, список игр, загрузка через пульт,
снимки результатов и команды существующего сервера. SCREEN-001 и SCREEN-004
остаются IN_PROGRESS до аппаратной приёмки. Подготовленная игра восстанавливается
офлайн без автоматического открытия показа и запуска звука.
Управление с телефона идёт через существующий сервер сайта; прямого LAN-подключения нет.
Цель: ведущий управляет показом на компьютере с macOS, Windows или Linux, а подключённый монитор или
проектор показывает материалы игрокам. Все материалы показа заранее находятся
@@ -22,8 +21,8 @@ macOS Intel/Apple Silicon, Windows x64/ARM64 и Linux x64/ARM64.
общего правила хранения задач в `../docs/agent`. Не дублировать их там.
Идентификаторы `SCREEN-*` относятся только к этому приложению.
Следующий этап: SCREEN-006 — авторизация, загрузка через интерфейс и серверная
синхронизация; аппаратная проверка SCREEN-004 остаётся открытой.
Следующий этап: SCREEN-007 — устойчивость на площадке; аппаратная проверка
SCREEN-001/SCREEN-004 остаётся открытой.
Новые задачи: `Новая задача: <описание>`.
Commit и push выполняет только пользователь. Вложенные `.git` не изменять.
@@ -45,12 +44,20 @@ npm run dev
его и откройте показ. Аудио и видео — синтетические локальные файлы длительностью
60 секунд; бинарники находятся в игнорируемом fixtures/ и не входят в Git.
Тестовый режим сохраняет отдельный выбор WAV/видео; игровые пакеты выбираются
в разделе «Материалы показа». Интерфейс загрузки игр и авторизация пока
не реализованы; они относятся к SCREEN-006.
в разделе «Материалы показа». В блоке «Игра и сервер» доступны вход, список игр и загрузка материалов.
Управление телефоном через сервер, подключение игры и авторизация относятся к
SCREEN-006 и в техническом стенде ещё не реализованы. Интернет нужен для получения
команд телефона; локальное воспроизведение и пульт компьютера работают без него.
Для команд телефона войдите, подготовьте и выберите игру, подключите управление
и откройте показ. Первое состояние не запускает накопленные команды;
отправьте новую команду на сайте. После обрыва сети локальный пульт продолжает
работать, первое состояние при восстановлении также пропускается.
[Проверка с существующим сервером и телефоном](docs/SCREEN-006_ACCEPTANCE.md).
Токены хранятся в основном процессе и сохраняются средствами ОС отдельно от
пакетов. Если защищённое хранилище недоступно, вход действует только до закрытия
приложения. Выход не удаляет подготовленные материалы. Обновление выбранной
игры доступно при закрытом показе; проверка описания не замечает замену байтов
по прежнему URL — используйте повторную загрузку. Результаты доступны после
завершения игры; последний успешный снимок сохраняется с датой для офлайн-показа.
Проверки: npm run type-check, npm run lint, npm run lint:css, npm test, npm run build.
[Сборки и аппаратная приёмка](docs/SCREEN-001_ACCEPTANCE.md).
@@ -63,8 +70,8 @@ token, signal? })` для вызова из основного процесса.
Авторизация — существующий Bearer JWT; токен используется только в запросах API,
не входит в результат. Редиректы API запрещены, ожидание ограничено 30 секундами;
поддерживается отмена через AbortSignal. Ответы с ошибками не выдают частичный пакет.
Интерфейс входа и подключение к пульту остаются в SCREEN-006; сейчас это программный
контракт, новых кнопок в стенде нет. Бэкенд, frontend и protobuf не изменены.
Интерфейс входа и загрузки подключён в SCREEN-006; описание используется основным
процессом без передачи токенов в renderer. Бэкенд, frontend и protobuf не изменены.
Результат `ScreenPackage` содержит `formatVersion: 1`, `metadataVersion`, адрес
сервера, ID/название игры, ссылки на материалы, шаги плана и связанные плейлисты.
@@ -88,7 +95,7 @@ token, signal? })` для вызова из основного процесса.
чтобы две копии не изменяли хранилище одновременно. При запуске проверяются
манифесты, размеры и SHA-256 всех файлов; повреждённые пакеты не становятся готовыми.
Программный интерфейс (для основного процесса; подключение к UI — SCREEN-006):
Программный интерфейс основного процесса (подключён к UI в SCREEN-006):
```ts
const store = new PackageStore(packagesDirectory)