Files
evening_detective_screen/COMPLETED_TASKS.md
T
2026-10-17 19:08:09 +07:00

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 — подключить подготовленные локальные ресурсы к проигрывателю и игровым командам без ожидания сети.