163 lines
17 KiB
Markdown
163 lines
17 KiB
Markdown
# Задачи приложения площадки
|
||
|
||
Все задачи имеют статус TODO; выполнение ещё не начато. План и общие ограничения:
|
||
[PLAN.md](PLAN.md). Идентификаторы независимы от ED-* в корневом списке.
|
||
Обновлять статус и результат здесь; завершённые записи переносить в
|
||
`COMPLETED_TASKS.md` в этом каталоге после проверки. Коммиты и push не выполнять.
|
||
|
||
## SCREEN-001 — Проверить основу Electron на macOS, Windows и Linux
|
||
|
||
- Статус: `TODO`
|
||
- Зависимости: нет; первая задача.
|
||
- Цель: подтвердить выбор технологии на всех шести вариантах ОС/архитектуры
|
||
из PLAN.md до переноса функций проекта. Все задачи приложения учитывают эту
|
||
матрицу; Linux проверяется на Ubuntu 24.04 LTS и Debian 13.
|
||
- Объём: минимальный Electron + Vue + TypeScript + Vite; пульт и отдельное окно
|
||
показа; выбор дисплея; синтетические локальные аудио/видео; IPC start/pause/stop
|
||
и seek; безопасный preload и локальная выдача медиа с Range. Подготовить сборки
|
||
для всех шести вариантов, инструкцию получения тестовых медиа и аппаратной
|
||
проверки. Бинарные тестовые файлы не коммитить.
|
||
- Готовность: запуск на всех шести вариантах; пульт остаётся на основном экране,
|
||
показ — на внешнем; звук запускается без ручной разблокировки autoplay;
|
||
pause/seek работают. Зафиксированы ОС, архитектура, CPU/RAM, медиаформаты,
|
||
оборудование и замеры. На M1 с 16 ГБ RAM цель p95 ≤150 мс; на остальных
|
||
компьютерах — медиана/p95 и стабильность без обязательного порога 150 мс.
|
||
- Проверка: type-check, lint, lint:css, build; минимум 30 запусков аудио и видео
|
||
на каждой тестовой конфигурации; отдельно холодный старт, fullscreen, физический
|
||
звук/кадр и отключённая сеть. Проверить кабель/USB и HDMI. Владелец выполняет
|
||
аппаратные проверки по инструкции агента и передаёт результаты.
|
||
- Не входит: сервер, авторизация, скачивание, полный пульт, публикация.
|
||
- Следующий шаг: прочитать frontend-стандарт, создать минимальный проект с учётом
|
||
всей матрицы и подготовить сборки/инструкцию. Доступность всех шести вариантов
|
||
подтверждена владельцем; фактические конфигурации записать при проверке.
|
||
Непройденные аппаратные проверки явно оставить открытыми.
|
||
|
||
## SCREEN-002 — Выдать версионированный пакет показа
|
||
|
||
- Статус: `TODO`
|
||
- Зависимость: SCREEN-001 подтверждён на всей матрице платформ.
|
||
- Репозитории: screen, server; frontend только при изменениях общего protobuf.
|
||
- Цель: получить полный список данных и файлов для подготовки конкретной игры.
|
||
- Объём: изучить доступ организатора, план, обложки, фон, вступление, видео,
|
||
плейлисты и вложенные ресурсы; использовать текущие RPC, добавить недостающий
|
||
манифест с версией, размерами, контрольными суммами и авторизованной загрузкой.
|
||
- Готовность: все ресурсы показа перечислены; изменение файла меняет версию;
|
||
отсутствие обязательного ресурса обнаруживается; чужую игру скачать нельзя;
|
||
существующие клиенты продолжают работать. Токены не входят в снимок пакета.
|
||
- Проверка: тесты полноты, версий и отказа в доступе; `go test ./...`; штатная
|
||
генерация protobuf и проверки frontend при затрагивании контракта.
|
||
- Не входит: локальная копия всей серверной БД и материалов вне показа.
|
||
- Следующий шаг: проследить callers RPC экранов и доступ к файлам, описать
|
||
минимальный контракт пакета и только затем менять API.
|
||
|
||
## SCREEN-003 — Скачивать и проверять материалы на диске
|
||
|
||
- Статус: `TODO`
|
||
- Зависимость: SCREEN-002.
|
||
- Цель: гарантировать полноту локального пакета до начала игры.
|
||
- Объём: прогресс и отмена загрузки, проверка свободного места, временные файлы,
|
||
SHA-256/размер, повтор после обрыва, атомарная активация, явное удаление пакета.
|
||
Незавершённые файлы никогда не выдавать как готовые.
|
||
- Готовность: все материалы читаются без сети; повреждённый или неполный пакет
|
||
не получает статус готовности; неудачное обновление сохраняет предыдущую версию;
|
||
перезапуск сохраняет готовность; удаление не затрагивает файлы вне хранилища.
|
||
- Проверка: тесты повреждения, нехватки места, обрыва/повтора, путей и обновления;
|
||
штатные проверки приложения; ручной запуск скачанного пакета без сети.
|
||
- Не входит: фоновое автообновление активного пакета и неограниченный кэш.
|
||
- Следующий шаг: определить формат каталога и манифеста, реализовать одну полную
|
||
загрузку с проверкой и затем обработать сбои.
|
||
|
||
## SCREEN-004 — Локальное воспроизведение и быстрые команды
|
||
|
||
- Статус: `TODO`
|
||
- Зависимость: SCREEN-003; использовать основу SCREEN-001.
|
||
- Цель: применять команды пульта независимо от сервера.
|
||
- Объём: локальное состояние в основном процессе; play/pause/resume/stop/replay,
|
||
seek, громкость и mute; плейлист, следующий трек и повтор; подготовка ближайшего
|
||
медиа; подтверждения фактического воспроизведения и понятные ошибки.
|
||
- Готовность: нет ожидания HTTP/опроса; повтор или быстрые последовательности
|
||
команд не создают двойной звук; музыка переходит дальше офлайн; нет загрузки всех
|
||
видео в RAM; политика одновременной музыки и речи соответствует текущему flow.
|
||
- Проверка: тесты переходов и устаревших/повторных команд; проверки приложения;
|
||
ручные seek/replay/смена трека и повтор замеров на всей матрице;
|
||
порог p95 ≤150 мс — на M1.
|
||
- Не входит: стриминг, несколько независимых проигрывателей на разных компьютерах.
|
||
- Следующий шаг: сверить существующую семантику ScreenCommand/MusicState и
|
||
реализовать один последовательный путь команда → проигрыватель → подтверждение.
|
||
|
||
## SCREEN-005 — Пульт ведущего и все режимы показа
|
||
|
||
- Статус: `TODO`
|
||
- Зависимость: SCREEN-004.
|
||
- Цель: провести показ выбранной игры с ноутбука без телефона.
|
||
- Объём: выбор подготовленного пакета, план шагов, предпросмотр без второго звука,
|
||
обложка, фон, вступление, закрывающее видео, текст, таймер, результаты и музыка;
|
||
фактические статусы загрузки, подготовки и воспроизведения на пульте.
|
||
- Готовность: все текущие режимы ScreenMode доступны; таймер работает локально
|
||
без накопления дрейфа от интервалов; пульт и технические сообщения не попадают
|
||
на проектор; неготовый файл нельзя ошибочно запустить как готовый.
|
||
- Проверка: проверки приложения и ручной проход полного плана без интернета;
|
||
предпросмотр не дублирует звук; кириллица, шрифты и изображения доступны офлайн.
|
||
- Не входит: редактор сценариев и полное управление командами/регистрациями игры.
|
||
- Следующий шаг: сопоставить текущие компоненты и callers с экраном пульта;
|
||
переиспользовать подходящее без преждевременного общего пакета.
|
||
|
||
## SCREEN-006 — Подключение игры и синхронизация с сервером
|
||
|
||
- Статус: `TODO`
|
||
- Зависимости: SCREEN-002, SCREEN-005.
|
||
- Цель: выбирать доступную организатору игру онлайн и сохранять автономность показа.
|
||
- Объём: существующая авторизация, список игр, загрузка пакета, снимок результатов,
|
||
индикатор связи, проверка новой версии материалов, синхронизация статуса показа.
|
||
Уточнить минимальный серверный контракт по фактической реализации.
|
||
- Готовность: готовая игра открывается после перезапуска офлайн; секреты хранятся
|
||
средствами ОС, не в пакете; истечение сессии не обрывает уже подготовленный
|
||
локальный показ; обновления активируются явно. Результаты имеют время снимка.
|
||
Возврат сети не повторяет старые команды; телефон не перехватывает desktop-показ.
|
||
- Проверка: сценарии offline/reconnect/истёкшей сессии/обновления игры; проверки
|
||
затронутых репозиториев; существующий браузерный экран продолжает работать.
|
||
- Не входит: полноценная офлайн-игра и удалённое управление desktop с телефона.
|
||
- Следующий шаг: сверить auth flow и модель сессий; зафиксировать правила
|
||
локального владения показом и отображения статуса на сервере.
|
||
|
||
## SCREEN-007 — Устойчивость на площадке
|
||
|
||
- Статус: `TODO`
|
||
- Зависимости: SCREEN-005, SCREEN-006.
|
||
- Цель: переживать типовые сбои без потери материалов и случайного показа пульта.
|
||
- Объём: отключение/возврат дисплея, смена разрешения и fullscreen, проверка
|
||
аудиовыхода каждой ОС, предотвращение сна во время показа, восстановление окон и
|
||
выбранного пакета после перезапуска. После сбоя звук самопроизвольно не возобновлять.
|
||
- Готовность: при отключении проектора показ безопасно приостанавливается, пульт
|
||
остаётся доступен; повторный вывод требует явного действия; выбранный пакет
|
||
сохранён, сон не прерывает активный показ, закрытие приложения освобождает блокировку.
|
||
- Проверка: аппаратный smoke на всей матрице с реальным внешним дисплеем,
|
||
переходником и звуком по кабелю/USB и HDMI; тесты восстановления состояния;
|
||
проверки приложения. Результаты аппаратных проверок передаёт владелец.
|
||
- Не входит: бесшовный аварийный резервный компьютер и несколько проекторов.
|
||
- Следующий шаг: проверить события Electron display/window и определить
|
||
минимальную безопасную реакцию на отключение внешнего экрана.
|
||
|
||
## SCREEN-008 — Сборки всех платформ и приёмка
|
||
|
||
- Статус: `TODO`
|
||
- Зависимость: SCREEN-007.
|
||
- Цель: получить устанавливаемую первую версию и подтверждённый сценарий площадки.
|
||
- Объём: воспроизводимые сборки macOS x64/arm64, Windows x64/ARM64 и Linux
|
||
x64/ARM64; инструкции установки/обновления и подготовки игры; решение о подписи
|
||
macOS/notarization по доступности Apple Developer и о подписи Windows по наличию
|
||
сертификата; локальные диагностические логи без секретов. Подписание macOS
|
||
на Mac, секреты вне Git; предупреждения установки без подписи документировать.
|
||
- Готовность: все шесть артефактов запускаются на соответствующих компьютерах,
|
||
Linux — на обоих дистрибутивах из PLAN.md; обновление сохраняет пакеты;
|
||
полный сценарий PLAN.md пройден. Записаны ОС/архитектура/версия приложения,
|
||
медиана/p95, форматы и ограничения; порог задержки применяется только к M1.
|
||
Непройденные проверки явно перечисляются и не позволяют объявить задачу DONE.
|
||
- Проверка: type-check, lint, lint:css, build; установка и полный показ офлайн,
|
||
переподключение проектора, восстановление сети и минимум час работы на каждой
|
||
тестовой конфигурации. Владелец выполняет аппаратную приёмку по инструкции агента.
|
||
- Не входит: публикация в магазинах приложений и автообновления.
|
||
- Следующий шаг: выбрать минимальный инструмент упаковки для всей матрицы,
|
||
проверить среду сборки и наличие сертификатов, собрать артефакты и подготовить
|
||
инструкции для аппаратной приёмки.
|