18 KiB
18 KiB
Задачи приложения площадки
SCREEN-001 имеет статус IN_PROGRESS; SCREEN-002 и SCREEN-003 завершены
и перенесены в архив; остальные активные задачи — TODO.
SCREEN-009 (LAN-пульт) отменена владельцем; ID не переиспользовать.
Управление телефоном через сервер входит в SCREEN-006. План и общие ограничения:
PLAN.md. Идентификаторы независимы от ED-* в корневом списке.
Обновлять статус и результат здесь; завершённые записи переносить в
COMPLETED_TASKS.md в этом каталоге после проверки. Коммиты и push не выполнять.
SCREEN-001 — Проверить основу Electron на macOS, Windows и Linux
- Статус:
IN_PROGRESS - Зависимости: нет; первая задача.
- Цель: подтвердить выбор технологии на всех шести вариантах ОС/архитектуры из 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. Владелец выполняет аппаратные проверки по инструкции агента и передаёт результаты.
- Не входит: сервер, авторизация, скачивание, полный пульт, публикация.
- Результат программного этапа: Electron + Vue/TypeScript/Vite, два изолированных окна, выбор внешнего дисплея, локальный протокол с Range, синтетические WAV/H.264+AAC, start/pause/stop/seek, подтверждённые статусы и замеры аудио/видео. По уточнению владельца LAN-сервер, сопряжение, мобильный UI и зависимости ws удалены. Телефон управляет через сервер сайта; desktop получает обновления в SCREEN-006. Полные игровые функции и сервер пока не переносились.
- Проверка после уточнения: type-check, lint, lint:css, build, 4 теста и GUI smoke — PASS. В smoke проверено отсутствие LAN-панели и методов lan/approve в preload, локальные play/pause/stop/seek, Range и открытие окна без автоповтора. Frontend-стандарт прочитан; ручное ревью diff выполнено, нарушений не найдено.
- Исправление выбора дисплея: для Linux явно включён X11/XWayland, поскольку native Wayland игнорирует глобальные координаты окон. Перед fullscreen повторно заданы bounds выбранного дисплея. GUI smoke проверяет размещение и повторное открытие; при наличии реального второго дисплея проверяет фактический монитор окна. Type-check, lint, lint:css, тесты и GUI smoke — PASS. В текущей среде физически подключён только eDP-1; второй дисплей в этом прогоне синтетический, аппаратная проверка переноса остаётся открытой. Нужен полный перезапуск приложения. Четыре Linux/Windows-архива пересобраны с исправлением; содержимое app.asar сверено с текущим кодом, SHA256SUMS обновлён. Нарушений стандарта в diff не найдено.
- Сборки: Linux/Windows x64/ARM64 пересобраны без LAN; содержимое всех четырёх app.asar сверено с проверенным кодом. LAN-модули, ws и тесты отсутствуют в поставке; release/SHA256SUMS обновлён. macOS нужно собирать на Mac или ручным workflow.
- Среда smoke: Manjaro Linux x86_64, Intel Core Ultra 7 255H, около 32 ГБ RAM; Node 26.8.1, Electron 42.11.15. Единичные программные замеры не подтверждают аппаратную приёмку или физический p95 ≤150 мс. Headless зависал/падал; GUI smoke проходил с тестовыми --no-sandbox --mute-audio --disable-gpu.
- Ограничения: дедупликация стенда хранит последние 4096 команд; долговременная семантика — SCREEN-004. Привязка игры и серверное управление — SCREEN-006.
- Следующий шаг: получить аппаратные результаты владельца по docs/SCREEN-001_ACCEPTANCE.md на всех шести вариантах (Linux — на обоих дистрибутивах), включая проектор, физический звук/кадр и 30 запусков для каждого формата/аудиовыхода. macOS-сборки подготовить на Mac или ручным workflow builds.yml. До результатов всей матрицы задача остаётся IN_PROGRESS. Владелец разрешил начать SCREEN-002 до завершения аппаратной приёмки; её результаты остаются открытыми.
SCREEN-004 — Локальное воспроизведение и быстрые команды
- Статус:
TODO - Зависимость: SCREEN-003 (DONE, см. COMPLETED_TASKS.md); использовать основу SCREEN-001. Материалы брать из PackageStore и screen-app://app/packages//.
- Цель: применять команды пульта независимо от сервера.
- Объём: локальное состояние в основном процессе; 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 получает обновления через экранную сессию и GetScreenState (существующий polling 1000 мс). Серверные команды применяются локальным контроллером к подготовленным файлам; повторная версия не применяется дважды. Прямого подключения телефона к desktop нет. Уточнить минимальный серверный контракт по фактической реализации.
- Готовность: готовая игра открывается после перезапуска офлайн; секреты хранятся средствами ОС, не в пакете; истечение сессии не обрывает уже подготовленный локальный показ; обновления активируются явно. Результаты имеют время снимка. Возврат сети не повторяет устаревшие команды поверх локальных действий. При доступном сервере телефон управляет показом через существующий сайт; без сети воспроизведение и пульт компьютера продолжают работать.
- Проверка: сценарии offline/reconnect/истёкшей сессии/обновления игры; проверки затронутых репозиториев; существующий браузерный экран продолжает работать.
- Не входит: полноценная офлайн-игра, LAN-сервер и отдельный мобильный пульт 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; установка и полный показ офлайн, переподключение проектора, восстановление сети и минимум час работы на каждой тестовой конфигурации. Владелец выполняет аппаратную приёмку по инструкции агента.
- Не входит: публикация в магазинах приложений и автообновления.
- Следующий шаг: выбрать минимальный инструмент упаковки для всей матрицы, проверить среду сборки и наличие сертификатов, собрать артефакты и подготовить инструкции для аппаратной приёмки.