Files
evening_detective_screen/TASKS.md
T
2026-10-17 20:16:24 +07:00

17 KiB
Raw Blame History

Задачи приложения площадки

SCREEN-001 и SCREEN-004 имеют статус IN_PROGRESS; SCREEN-002, SCREEN-003, SCREEN-005 и SCREEN-006 завершены и перенесены в архив; остальные активные задачи — 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 — Локальное воспроизведение и быстрые команды

  • Статус: 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 — Устойчивость на площадке

  • Статус: TODO
  • Зависимости: SCREEN-005, SCREEN-006 (DONE, см. COMPLETED_TASKS.md).
  • Цель: переживать типовые сбои без потери материалов и случайного показа пульта.
  • Объём: отключение/возврат дисплея, смена разрешения и 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; установка и полный показ офлайн, переподключение проектора, восстановление сети и минимум час работы на каждой тестовой конфигурации. Владелец выполняет аппаратную приёмку по инструкции агента.
  • Не входит: публикация в магазинах приложений и автообновления.
  • Следующий шаг: выбрать минимальный инструмент упаковки для всей матрицы, проверить среду сборки и наличие сертификатов, собрать артефакты и подготовить инструкции для аппаратной приёмки.