7.6 KiB
7.6 KiB
Завершённые задачи приложения площадки
SCREEN-002 — Собрать описание пакета через существующий API
- Статус:
DONE. - Дата: 2026-10-17.
- Репозиторий: только screen; бэкенд, frontend и protobuf не изменены.
- Уточнение владельца: использовать текущий API без изменений бэкенда; SCREEN-002 разрешена до завершения аппаратной приёмки SCREEN-001.
- Результат:
electron/screen-package.tsполучает игру, план и музыку через существующие GET endpoints и собирает ScreenPackage версии формата 1. Пакет содержит обложку, фон (с подстановкой обложки), вступительное аудио, заключительное видео, шаги и связанные плейлисты со всеми треками. Ссылки дедуплицируются, треки упорядочены по позиции/ID, посторонняя библиотека, данные участников и живые команды исключены. - Авторизация: существующий JWT используется только для API указанного сервера, не сохраняется в результате; редиректы API запрещены. Поддерживаются отмена, таймаут и безопасные ошибки без содержимого серверных ответов. Адреса с логином/паролем и ссылки с секретными параметрами отклоняются.
- Версия: metadataVersion — детерминированный SHA-256 нормализованных метаданных. Идентификаторы ресурсов — SHA-256 URL. Это не контрольные суммы файлов и не подтверждение готовности пакета. Размеры, хеши байтов и итоговая версия — SCREEN-003. Сервер не предоставляет атомарного снимка и хешей ресурсов.
- Проверки:
npm run type-check,npm run lint,npm run lint:css,npm test(12 тестов, включая 8 новых),npm run build,git diff --check— PASS. - Ограничения: проверено на фикстурах текущего JSON-контракта, живой сервер и реальные игровые файлы не проверялись. Загрузки файлов и новых кнопок нет; программный контракт подключается к интерфейсу при SCREEN-006. Существующие права доступа и публичная выдача файлов не менялись. Установочные архивы не пересобирались; аппаратная приёмка SCREEN-001 остаётся открытой.
- Следующий шаг: SCREEN-003 — скачать и проверить файлы, сформировать итоговую версию и атомарно активировать готовый локальный пакет.
SCREEN-003 — Скачивать и проверять материалы на диске
- Статус:
DONE. - Дата: 2026-10-17.
- Репозиторий: только screen; бэкенд, frontend и protobuf не изменены.
- Результат: PackageStore в основном процессе; потоковая последовательная загрузка, отмена, прогресс, контроль свободного места с резервом 64 МиБ, SHA-256/размер при записи и повторная проверка с диска. При обрыве повторяется целый текущий файл (выбор владельца); максимум три попытки, паузы 1/3 секунды, таймаут 30 секунд.
- Хранение: userData/packages, отдельные каталоги игры и версий, временная загрузка, синхронизация файлов, атомарная замена указателя текущей версии. Неудачное обновление сохраняет предыдущую готовую копию; отмена удаляет временные данные. При перезапуске проверяются все файлы и очищаются оставшиеся временные/старые версии. Повреждённый текущий пакет не становится готовым и доступен для удаления либо восстановления повторной загрузкой. Приложение запускается одним экземпляром.
- Доступ: локальная выдача только готовых файлов по ключу игры и ID ресурса, MIME/Range/no-store; произвольные пути и симлинки отклоняются. Скачивание медиа без JWT/cookies, до пяти проверенных редиректов, запрет HTTPS→HTTP и URL с секретами. Учтены MIME audio/wave и application/ogg существующего бэкенда.
- Проверки:
npm run type-check,npm run lint,npm run lint:css,npm test(26 тестов, 14 новых), сборка в составеnpm run smoke,git diff --check— PASS. Протестированы обрывы/повторы, отмена до активации, нехватка места до и во время загрузки, таймаут, повреждение при проверке/после перезапуска, восстановление, следы сбоя, редиректы, ошибочные ответы, симлинки и запрет параллельных изменений. - Офлайн-проверка: настоящий HTTP-сервер выключен после загрузки, новое хранилище восстановило и прочитало пакет. GUI smoke Electron 42.11.15: повторное открытие хранилища, WAV через локальный протокол, Range 206/44 байта, длительность 60 секунд, воспроизведение — PASS; тестовые --no-sandbox --mute-audio --disable-gpu.
- Ограничения: проверено на текущем Linux x64; macOS/Windows и аппаратная матрица SCREEN-001 остаются открытыми. GUI использовал синтетический второй дисплей. Рабочий сервер и реальные игровые материалы не проверялись; сервер не выдаёт эталонных хешей и атомарного снимка. Установочные архивы не пересобирались. UI загрузки/вход остаётся в SCREEN-006; хранилище предоставляет программный API.
- Следующий шаг: SCREEN-004 — подключить подготовленные локальные ресурсы к проигрывателю и игровым командам без ожидания сети.