This commit is contained in:
2026-10-17 18:25:04 +07:00
parent 701bca234e
commit d3683ac6cf
15 changed files with 124 additions and 691 deletions
+32 -55
View File
@@ -1,6 +1,8 @@
# Задачи приложения площадки
SCREEN-001 имеет статус IN_PROGRESS; остальные задачи — TODO. План и общие ограничения:
SCREEN-001 имеет статус IN_PROGRESS; остальные задачи — TODO.
SCREEN-009 (LAN-пульт) отменена владельцем; ID не переиспользовать.
Управление телефоном через сервер входит в SCREEN-006. План и общие ограничения:
[PLAN.md](PLAN.md). Идентификаторы независимы от ED-* в корневом списке.
Обновлять статус и результат здесь; завершённые записи переносить в
`COMPLETED_TASKS.md` в этом каталоге после проверки. Коммиты и push не выполнять.
@@ -14,8 +16,7 @@ SCREEN-001 имеет статус IN_PROGRESS; остальные задачи
матрицу; Linux проверяется на Ubuntu 24.04 LTS и Debian 13.
- Объём: минимальный Electron + Vue + TypeScript + Vite; пульт и отдельное окно
показа; выбор дисплея; синтетические локальные аудио/видео; IPC start/pause/stop
и seek; безопасный preload и локальная выдача медиа с Range; техническое
подключение браузера телефона по LAN с сопряжением и отправкой команды. Подготовить сборки
и seek; безопасный preload и локальная выдача медиа с Range. Подготовить сборки
для всех шести вариантов, инструкцию получения тестовых медиа и аппаратной
проверки. Бинарные тестовые файлы не коммитить.
- Готовность: запуск на всех шести вариантах; пульт остаётся на основном экране,
@@ -28,36 +29,28 @@ SCREEN-001 имеет статус IN_PROGRESS; остальные задачи
звук/кадр и отключённая сеть. Проверить кабель/USB и HDMI. Владелец выполняет
аппаратные проверки по инструкции агента и передаёт результаты.
- Не входит: сервер, авторизация, скачивание, полный пульт, публикация.
- Результат программного этапа (17.10.2026): Electron + Vue/TypeScript/Vite,
два изолированных окна, выбор внешнего дисплея, локальный протокол с Range,
синтетические WAV/H.264+AAC, start/pause/stop/seek, подтверждённые статусы и
отдельные замеры аудио/видео и компьютера/телефона. LAN включается явно:
код + подтверждение на компьютере, HttpOnly-сеанс, отзыв при отключении.
Полные игровые функции и сервер не переносились.
Подготовлены четыре финальных архива Linux/Windows x64/ARM64 в release/ и
SHA256SUMS; содержимое app.asar всех четырёх сверено с проверенным кодом,
медиа присутствуют, тестовые модули исключены из поставки. Linux x64-бинарник
отдельно запускается из упакованного каталога; UI/preload и Range — PASS.
macOS x64/ARM64 не собраны здесь: нужны Mac или подготовленный ручной CI workflow.
- Проверка: frontend-стандарт прочитан; ручное ревью нового кода выполнено,
используются Naive UI, типизированный IPC, scoped CSS и палитра проекта.
type-check, lint, lint:css, build и 5 тестов — PASS. GUI smoke — PASS:
фактический запуск/пауза/стоп/seek медиа, Range 206/100 байт, запрет IPC из окна
показа, сопряжение через браузерный UI, оба пульта, отзыв и открытие окна без
автоповтора. Это синтетический дисплей и браузер Electron, не проектор/телефон.
Проверено, что превышение лимита WebSocket закрывает соединение, не сервер.
В sandbox LAN-тесту недоступен bind; PASS получен вне sandbox с временным портом.
Headless в этой среде зависал/завершался SIGSEGV; GUI прошёл с тестовыми
--no-sandbox --mute-audio --disable-gpu. В обычном запуске этих флагов нет.
- Результат программного этапа: 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/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 мс.
- Ограничения: npm audit --omit=dev — 0 уязвимостей; полный audit — 20 в цепочках
инструментов разработки (8 moderate, 12 high). Дедупликация стенда хранит последние
4096 команд; долговременная семантика — SCREEN-004. HTTP только в доверенной сети.
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 — на обоих
дистрибутивах), включая реальные iPhone/Safari и Android/Chrome, проектор,
дистрибутивах), включая проектор,
физический звук/кадр и 30 запусков для каждого формата/аудиовыхода. macOS-сборки
подготовить на Mac или ручным workflow builds.yml. До результатов всей матрицы
задача остаётся IN_PROGRESS, SCREEN-002 не начинается.
@@ -139,22 +132,27 @@ SCREEN-001 имеет статус IN_PROGRESS; остальные задачи
- Цель: выбирать доступную организатору игру онлайн и сохранять автономность показа.
- Объём: существующая авторизация, список игр, загрузка пакета, снимок результатов,
индикатор связи, проверка новой версии материалов, синхронизация статуса показа.
Телефон отправляет команды существующему серверу сайта; desktop получает
обновления через экранную сессию и GetScreenState (существующий polling 1000 мс).
Серверные команды применяются локальным контроллером к подготовленным файлам;
повторная версия не применяется дважды. Прямого подключения телефона к desktop нет.
Уточнить минимальный серверный контракт по фактической реализации.
- Готовность: готовая игра открывается после перезапуска офлайн; секреты хранятся
средствами ОС, не в пакете; истечение сессии не обрывает уже подготовленный
локальный показ; обновления активируются явно. Результаты имеют время снимка.
Возврат сети не повторяет старые команды; серверные команды не перехватывают desktop-показ.
Возврат сети не повторяет устаревшие команды поверх локальных действий.
При доступном сервере телефон управляет показом через существующий сайт; без сети
воспроизведение и пульт компьютера продолжают работать.
- Проверка: сценарии offline/reconnect/истёкшей сессии/обновления игры; проверки
затронутых репозиториев; существующий браузерный экран продолжает работать.
- Не входит: полноценная офлайн-игра и управление desktop через интернет.
Телефон по LAN реализуется в SCREEN-009; сайт не перехватывает локальное управление.
- Не входит: полноценная офлайн-игра, LAN-сервер и отдельный мобильный пульт desktop.
- Следующий шаг: сверить auth flow и модель сессий; зафиксировать правила
локального владения показом и отображения статуса на сервере.
## SCREEN-007 — Устойчивость на площадке
- Статус: `TODO`
- Зависимости: SCREEN-005, SCREEN-006, SCREEN-009.
- Зависимости: SCREEN-005, SCREEN-006.
- Цель: переживать типовые сбои без потери материалов и случайного показа пульта.
- Объём: отключение/возврат дисплея, смена разрешения и fullscreen, проверка
аудиовыхода каждой ОС, предотвращение сна во время показа, восстановление окон и
@@ -191,24 +189,3 @@ SCREEN-001 имеет статус IN_PROGRESS; остальные задачи
- Следующий шаг: выбрать минимальный инструмент упаковки для всей матрицы,
проверить среду сборки и наличие сертификатов, собрать артефакты и подготовить
инструкции для аппаратной приёмки.
## SCREEN-009 — Полный пульт телефона по локальной сети
- Статус: `TODO`
- Зависимость: SCREEN-005; использовать техническую основу SCREEN-001.
- Цель: управлять показом с компьютера и телефона одновременно без интернета.
- Объём: общий Vue-пульт и типы команд внутри screen, HTTP и WebSocket на выбранном
IPv4-интерфейсе; код сопряжения и подтверждение на компьютере, отзыв сеансов;
все режимы, шаги, таймер, музыка, громкость и перемотка. Загрузка игры и дисплей —
только на компьютере. Доверенная Wi-Fi/LAN или точка доступа; HTTP без шифрования.
- Готовность: основной процесс последовательно применяет команды обоих пультов,
рассылает актуальное состояние; повтор команды не применяется дважды. Потеря
связи блокирует телефон, но не показ; переподключение не повторяет команды.
Доступ без сопряжения запрещён; отключение пульта отзывает сеансы.
- Проверка: тесты валидации, сопряжения, отзыва, повторных/одновременных команд и
восстановления; type-check, lint, lint:css, build; Safari iPhone и Chrome Android,
блокировка телефона, потеря Wi-Fi, работа без интернета. Задержки телефона отдельно.
- Не входит: публичная сеть площадки, сертификаты, управление через интернет,
скачивание пакетов и настройка дисплеев с телефона.
- Следующий шаг: после SCREEN-005 подключить полный интерфейс к локальному
контроллеру через общий транспортный контракт и пройти мобильную приёмку.