# Задачи приложения площадки SCREEN-001, SCREEN-004, SCREEN-007 и SCREEN-008 имеют статус IN_PROGRESS; SCREEN-002, SCREEN-003, SCREEN-005 и SCREEN-006 завершены и перенесены в архив; остальные активные задачи — 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-004 — Локальное воспроизведение и быстрые команды - Статус: `IN_PROGRESS` - Зависимость: 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. - Не входит: стриминг, несколько независимых проигрывателей на разных компьютерах. - Программный результат (2026-10-17): готовые пакеты подключены к пульту через проверку PackageStore; явный тестовый режим сохранён. Вступление и видео взаимно исключаются в основном канале, музыка независима и не приглушается автоматически (существующая политика сайта). Начальная громкость 35%, общий mute сохраняет уровни. Добавлены play/pause/resume/stop/replay/seek, выбор плейлиста/трека, следующий трек и повтор плейлиста. Позиции ограничиваются фактической длительностью, пауза и громкость не перематывают ресурс. - Согласование: новая сессия при выборе пакета и пересоздании окна, возрастающие номера команд без накопления UUID; подтверждения привязаны к операции канала. Отменённый play не оживляет канал, быстрый seek→pause не теряет перемотку; повторный пуск перезагружает источник после ошибки чтения. Окно открывается с остановленными каналами, автоматического возобновления звука нет. - Проверки: типы, ESLint, Stylelint, 37 тестов, сборка и GUI smoke Electron — PASS. GUI проверил выбор пакета через пульт, локальные WAV/H.264, Range, pause/resume, replay/seek, независимую музыку, mute/volume, переход/повтор плейлиста, быстрые команды, запреты IPC и повторное открытие без автозапуска. Сборки и тесты запускать последовательно: test и smoke пересобирают один dist-electron. При параллельной пересборке был таймаут повторного открытия; последовательные прогоны прошли. - Открыто: аппаратная матрица и физический p95 ≤150 мс на M1; текущие программные замеры этого не подтверждают. Проверено на Linux x64, дисплей smoke синтетический, звук приглушён тестовым флагом. Реальные игровые файлы и остальные ОС не проверены; установочные архивы не пересобирались. Бэкенд и protobuf не менялись. - Следующий шаг: выполнить npm run acceptance и аппаратную инструкцию docs/SCREEN-004_ACCEPTANCE.md на всей матрице, получить результаты владельца. До их получения статус остаётся IN_PROGRESS; перенос в архив не выполняется. ## SCREEN-007 — Устойчивость на площадке - Статус: `IN_PROGRESS` - Зависимости: SCREEN-005, SCREEN-006 (DONE, см. COMPLETED_TASKS.md). - Цель: переживать типовые сбои без потери материалов и случайного показа пульта. - Объём: отключение/возврат дисплея, смена разрешения и fullscreen, проверка аудиовыхода каждой ОС, предотвращение сна во время показа, восстановление окон и выбранного пакета после перезапуска. После сбоя звук самопроизвольно не возобновлять. - Готовность: при отключении проектора показ безопасно приостанавливается, пульт остаётся доступен; повторный вывод требует явного действия; выбранный пакет сохранён, сон не прерывает активный показ, закрытие приложения освобождает блокировку. - Проверка: аппаратный smoke на всей матрице с реальным внешним дисплеем, переходником и звуком по кабелю/USB и HDMI; тесты восстановления состояния; проверки приложения. Результаты аппаратных проверок передаёт владелец. - Не входит: бесшовный аварийный резервный компьютер и несколько проекторов. - Программный результат (2026-10-17): общий аварийный обработчик отключения/ превращения дисплея в основной, изменения bounds/scaleFactor/rotation, выхода из fullscreen, suspend ОС, падения/зависания renderer и ошибки основного документа. Медиа останавливаются, работающий таймер сохраняет точный остаток на паузе; возврат дисплея/пробуждение не открывают показ. Обычная кнопка закрытия сохраняет прежнюю политику таймера. Изменения только workArea не прерывают показ. - Окна и питание: prevent-display-sleep удерживается всё время открытого показа, включая статичные сцены/паузу, освобождается при закрытии, сбое и before-quit. Native-закрытие завершается до создания нового окна; уничтожение отложено за пределы callback native-события, поздние события старого окна отклоняются. Пульт восстанавливает проверенные bounds/maximized в рабочей области основного дисплея; ID/label внешнего дисплея сохраняются отдельно в windows.json. Выбор предзаполняется только при точном совпадении и никогда не открывает показ сам. Выбранная игра восстанавливается существующим механизмом SCREEN-006. - Изоляция: показ использует отдельную непостоянную Electron session/renderer; обе сессии получают одинаковый локальный протокол, CSP и запреты разрешений. IPC-привилегии пульта не расширены. В UI добавлены причина закрытия, состояние блокировки сна и инструкция проверки системного аудиовыхода/HDMI. - Проверки: type-check, ESLint, Stylelint, 68 тестов (5 новых), сборка и GUI smoke — PASS. GUI проверяет удаление/возврат дисплея, bounds/scale/rotation, смену primary, suspend/resume, fullscreen-события, ошибку документа и зависание окна, сохранение настроек, отсутствие автопуска и старой серверной команды после аварии. Renderer действительно завершён SIGKILL после проверки отдельного PID; пульт сохранил работоспособность, показ открылся заново остановленным. Все 16 созданных блокировок освобождены ровно один раз, включая before-quit. git diff --check — PASS. - Ограничения стенда: Linux x64, один физический дисплей. В GUI synthetic=true: topology/питание и fullscreen-события подставлены, медиа и окна Electron настоящие. Native fullscreen используется только с реальным внешним дисплеем; иначе WM сам снимал fullscreen синтетического экрана. В раннем прогоне было native-падение Electron; исправлен порядок закрытия/повторного открытия. forcefullyCrashRenderer зависал до таймаута, поэтому окончательный тест завершает renderer через SIGKILL. Использованы тестовые no-sandbox/mute-audio/disable-gpu. Реальное предотвращение сна, проектор/аудиовыходы и вся матрица ОС/архитектур пока не проверены. Бэкенд, frontend, protobuf и зависимости не менялись; архивы не пересобирались. - Следующий шаг: выполнить docs/SCREEN-007_ACCEPTANCE.md на всей матрице с реальным проектором, переходником, USB/HDMI и передать аппаратные результаты. До этого оставить IN_PROGRESS, не переносить в COMPLETED_TASKS.md. Commit/push не выполнять. ## SCREEN-008 — Сборки всех платформ и приёмка - Статус: `IN_PROGRESS` - Зависимость: 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; установка и полный показ офлайн, переподключение проектора, восстановление сети и минимум час работы на каждой тестовой конфигурации. Владелец выполняет аппаратную приёмку по инструкции агента. - Не входит: публикация в магазинах приложений и автообновления. - Программный результат (2026-10-17): кандидат 0.2.0-rc.1 на существующем electron-builder; форматы ZIP для macOS/Windows и tar.gz для Linux сохранены. Без доверенной подписи/notarization по решению владельца; macOS использует техническую ad-hoc подпись. appId и расположение пользовательских данных сохранены. - Локально собраны Linux x64/ARM64 и Windows x64/ARM64. После распаковки каждого архива проверены архитектура исполняемого файла, состав app.asar и SHA-256 медиа. Добавлены build-info с версиями инструментов, Git revision/dirty и хешами, sidecar-файлы и SHA256SUMS только для текущих артефактов. Шесть нативных CI jobs подготовлены; workflow агент не запускал. Сборки macOS пока отсутствуют. - Диагностика: локальные JSONL, максимум три файла по 1 МиБ, фиксированные события и разрешённые поля; URL, токены, пароли, данные игр и сырые ошибки не записываются. - Проверки: типы, ESLint, Stylelint и 73 теста — PASS. Упакованный Linux x64 прошёл обновление из 0.1.0 и два перезапуска с сохранением пакета, результатов и настроек, без автопуска. Подробности и итоговый GUI smoke: docs/SCREEN-008_RESULTS.md. Инструкция: docs/SCREEN-008_ACCEPTANCE.md. - Начало аппаратной приёмки Linux: SHA-256 повторно проверены; запущен кандидат без тестовых флагов с отдельным профилем. На Manjaro KDE обнаружен только eDP-1; ожидается проектор. Зафиксированы три падения GPU-процесса (139), состояние UI требует подтверждения владельца. Подробности в docs/SCREEN-008_RESULTS.md; аппаратный PASS пока не выставлен. - Документация ведущего (2026-10-17): добавлены docs/USER_GUIDE.md и docs/EVENT_CHECKLIST.md — установка/обновление, подготовка игры, управление, офлайн и восстановление, журналы и чек-лист площадки. README содержит навигацию по ролям и однозначный выбор внешнего дисплея. Названия кнопок и поведение сверены с текущим UI; относительные ссылки и git diff --check — PASS. Код не менялся, новые аппаратные испытания не выполнялись. - Согласование интерфейса с сервером и сайтом (2026-10-17): названия режимов приведены к сайту («Введение», «Успехов», «Закрывашка», «Спасибо за игру»), статусы игр переведены. Рядом с подключением указано имя локальной игры; выбор серверной игры для загрузки её не меняет. Добавлено пояснение, что отключение управления не удаляет серверную привязку. - Назначение звука: OnlineState.soundEnabled (boolean | null) содержит последнее подтверждение сервера отдельно от локального mute. До подтверждения неизвестно, без опроса помечается как последнее состояние; при новой сессии/отключении сбрасывается. Отрицательное значение означает «Экран не назначен для звука»: наличие другого назначенного экрана серверный флаг не доказывает. - Проверки согласования: type-check, ESLint, Stylelint, 74 теста, сборка и GUI smoke — PASS. GUI проверил переведённый статус, независимые выборы игр и статус звука; юнит-тест — смену назначения, mute, обрыв связи и сброс сессии. Два ранних GUI-прогона остановились на селекторе нового теста; исправлен выбор видимого элемента Naive UI, итоговый прогон PASS. Ссылки документации (28) и git diff --check — PASS. Руководство и чек-лист обновлены. Архивы кандидата не пересобирались; отличие текущих исходников от архивов явно описано в README. Бэкенд, сайт, protobuf и зависимости не менялись. - Ревизия SCREEN-005/006 (2026-10-17): исправлены назначение звука после обрыва, сброс прокрутки неизменной таблицы и пропуск перестановки треков. 77 тестов, типы, линтеры, сборка, GUI smoke и проверка diff/стандарта — PASS; подробности в COMPLETED_TASKS.md. Архивы не пересобирались; аппаратная приёмка остаётся открытой. - Исправление запуска SCREEN-001/008 (2026-10-17): воспроизведён SIGSEGV GPU-процесса в ANGLE/EGL на Manjaro KDE Wayland/XWayland. Для Wayland-сессий Linux отключена только GPU-композиция окон. Обычный запуск исходников с чистым профилем подтверждён отрисованным пультом без падений GPU. 77 тестов, типы, линтеры и GUI smoke без no-sandbox/disable-gpu — PASS. Linux x64 пересобран; подробности в docs/SCREEN-008_RESULTS.md. Аппаратная приёмка остаётся открытой. - Уточнение SCREEN-001/008 (2026-10-18): предыдущая проверка снимком страницы не подтверждала native-видимость окна. Причина — выбор X11 через appendSwitch после выбора Wayland в Electron. npm-команды теперь используют ранний X11; обычный Linux-запуск перезапускается с ним до создания окон. Прежнее отключение GPU-композиции удалено. Проверены native XID и регистрация окна в KWin; 77 тестов, типы, линтеры и GUI smoke — PASS. Аппаратная приёмка остаётся открытой. - Открыто: получить macOS x64/arm64 через workflow после commit/push владельцем; выполнить аппаратную матрицу, включая оба Linux-дистрибутива, час офлайн, проектор/звук/телефон и физические замеры на M1. Статус IN_PROGRESS до получения результатов всех стендов. SCREEN-001/004/007 также не закрываются. Бэкенд, сайт, protobuf и зависимости не менялись; commit/push не выполнялись.