# Задачи приложения площадки SCREEN-001 имеет статус IN_PROGRESS; остальные задачи — TODO. SCREEN-009 (LAN-пульт) отменена владельцем; ID не переиспользовать. Управление телефоном через сервер входит в SCREEN-006. План и общие ограничения: [PLAN.md](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-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 получает обновления через экранную сессию и 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; установка и полный показ офлайн, переподключение проектора, восстановление сети и минимум час работы на каждой тестовой конфигурации. Владелец выполняет аппаратную приёмку по инструкции агента. - Не входит: публикация в магазинах приложений и автообновления. - Следующий шаг: выбрать минимальный инструмент упаковки для всей матрицы, проверить среду сборки и наличие сертификатов, собрать артефакты и подготовить инструкции для аппаратной приёмки.