Files
evening_detective_screen/TASKS.md
T
2026-10-17 21:28:21 +07:00

209 lines
24 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Задачи приложения площадки
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/<key>/<assetId>.
- Цель: применять команды пульта независимо от сервера.
- Объём: локальное состояние в основном процессе; 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 пока не выставлен.
- Открыто: получить macOS x64/arm64 через workflow после commit/push владельцем;
выполнить аппаратную матрицу, включая оба Linux-дистрибутива, час офлайн,
проектор/звук/телефон и физические замеры на M1. Статус IN_PROGRESS до получения
результатов всех стендов. SCREEN-001/004/007 также не закрываются.
Бэкенд, сайт, protobuf и зависимости не менялись; commit/push не выполнялись.