This commit is contained in:
2026-10-17 20:57:16 +07:00
parent 40456eebf1
commit 1d4028b183
13 changed files with 849 additions and 48 deletions
+39 -4
View File
@@ -1,6 +1,6 @@
# Задачи приложения площадки
SCREEN-001 и SCREEN-004 имеют статус IN_PROGRESS; SCREEN-002, SCREEN-003, SCREEN-005 и SCREEN-006
SCREEN-001, SCREEN-004 и SCREEN-007 имеют статус IN_PROGRESS; SCREEN-002, SCREEN-003, SCREEN-005 и SCREEN-006
завершены и перенесены в архив; остальные активные задачи — TODO.
SCREEN-009 (LAN-пульт) отменена владельцем; ID не переиспользовать.
Управление телефоном через сервер входит в SCREEN-006. План и общие ограничения:
@@ -111,7 +111,7 @@ SCREEN-009 (LAN-пульт) отменена владельцем; ID не пе
## SCREEN-007 — Устойчивость на площадке
- Статус: `TODO`
- Статус: `IN_PROGRESS`
- Зависимости: SCREEN-005, SCREEN-006 (DONE, см. COMPLETED_TASKS.md).
- Цель: переживать типовые сбои без потери материалов и случайного показа пульта.
- Объём: отключение/возврат дисплея, смена разрешения и fullscreen, проверка
@@ -124,8 +124,43 @@ SCREEN-009 (LAN-пульт) отменена владельцем; ID не пе
переходником и звуком по кабелю/USB и HDMI; тесты восстановления состояния;
проверки приложения. Результаты аппаратных проверок передаёт владелец.
- Не входит: бесшовный аварийный резервный компьютер и несколько проекторов.
- Следующий шаг: проверить события Electron display/window и определить
минимальную безопасную реакцию на отключение внешнего экрана.
- Программный результат (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 — Сборки всех платформ и приёмка