add brandbook
This commit is contained in:
@@ -2,6 +2,97 @@
|
||||
|
||||
Архив задач, переведённых в статус `DONE`.
|
||||
|
||||
### ED-058 — Добавить карту и лист оплаты в материалы ведущего
|
||||
|
||||
- Статус: `DONE`
|
||||
- Цель: добавить два согласованных исходных PNG в `Для ведущего/` каждого печатного ZIP.
|
||||
- Решение: встроенные ассеты бэкенда, исходные имена и байты; существующие проверки отмены и размера архива.
|
||||
- Критерии: оба файла есть в ZIP, в том числе без команд, без преобразования в PDF.
|
||||
- Проверка: тесты наличия и точного совпадения байтов, `gofmt`, `go test ./...`, `git diff --check`, ревью Go-стандарта.
|
||||
- Ограничения: без обработки изображений, изменений API/UI, физической печати, commit/push.
|
||||
- Результат: оба исходных PNG добавляются в `Для ведущего/` с исходными именами для каждой игры. Тесты подтверждают наличие и точные байты файлов, включая игру без команд; копии ассетов сверены с исходниками. `gofmt`, `go test ./...` и `git diff --check` выполнены успешно; diff проверен по Go-стандарту.
|
||||
- Ограничения проверки: физическая печать и рабочий сервер не проверялись. Commit/push не выполнялись.
|
||||
|
||||
|
||||
### ED-057 — Заменить дипломы универсальным бланком
|
||||
|
||||
- Статус: `DONE`
|
||||
- Цель: заменить три диплома одним пустым бланком из согласованного PNG.
|
||||
- Решение: одностраничный A4 с исходной картинкой целиком, без обрезки и надписей; `Для ведущего/Дипломы/Диплом.pdf`.
|
||||
- Критерии: один диплом в ZIP, включая игру без команд; все поля заполняются вручную.
|
||||
- Проверка: тесты PDF и архива, визуальная проверка, `go test ./...`, Go-стандарт и `git diff --check`.
|
||||
- Ограничения: без автозаполнения, новых зависимостей, изменений API/UI, физической печати, commit/push.
|
||||
- Результат: три прежних диплома заменены одним пустым бланком; исходный PNG встроен без изменений. PDF визуально проверен: рамка целиком, поля пустые. `gofmt`, `go test ./...` и `git diff --check` выполнены успешно; diff проверен по Go-стандарту.
|
||||
- Ограничения проверки: физическая печать и рабочий сервер не проверялись; исходник около 128 dpi на A4. Предпросмотр: `/tmp/ed057-diploma.pdf`. Commit/push не выполнялись.
|
||||
|
||||
|
||||
### ED-056 — Редактор и офлайн-воспроизведение групп в screen
|
||||
|
||||
- Статус: `DONE`
|
||||
- Репозиторий: `evening_detective_screen`.
|
||||
- Цель: редактирование групп только в режиме редактирования, запуск групп в обычном режиме и полное воспроизведение подготовленных групп без сервера.
|
||||
- Результат: в редактор добавлены создание, переименование, удаление без удаления треков, режим завершения, перестановка групп и треков внутри группы, перенос треков. Операции используют API ED-055; учитываются запреты активной/приостановленной группы. В обычном режиме — названия и режимы групп, текущая группа, «Играть группу» и возврат к целому плейлисту. Полей и кнопок изменения групп вне редактирования нет.
|
||||
- Результат: черновики сохраняются при ошибках, потере связи, внешнем изменении и удалении группы; закрытие с изменениями требует явной отмены. Подтверждённое удаление собственной группы отменяет её черновик. Смена сервера сбрасывает контекст редактора.
|
||||
- Результат: локальный пакет, каталог и IPC содержат группы и принадлежность треков; состояние канала хранит groupId. Формат пакета остаётся 1; отсутствующие новые поля не меняют старую форму данных и отпечатки. Метаданные групп входят в новые отпечатки и обнаружение обновлений материалов. Руководство пользователя обновлено.
|
||||
- Результат: единая функция переходов используется контроллером, подготовкой следующего файла, командами и офлайн-продолжением. Поддержаны повтор одного/нескольких треков, остановка, следующая непустая группа и остановка в конце списка. При отсутствии файла или неподготовленной группе музыка безопасно останавливается с ошибкой; выход в общий список не выполняется. После восстановления связи применяется серверное состояние даже с прежней версией; офлайн-команды не отправляются задним числом.
|
||||
- Результат: обработчики загрузки и завершения защищены от старых операций и сессий. Ожидающий ответ по старой группе не блокирует окончание новой короткой группы. Пауза, продолжение, громкость и ручной выбор сохраняют корректную группу и позицию.
|
||||
- Проверено: `npm run type-check`, `npm run lint`, `npm run lint:css`, `npm test` (все 241 тест), `npm run build`, `git diff --check`; после сохранения исходной проверки отмены загрузки дополнительно пройден финальный online.test.js. Проверены парсер, переходы, сохранение/чтение пакетов, отпечатки, API редактора, предзагрузка, ошибки файлов, восстановление связи, устаревшие ошибки и конкурентные окончания.
|
||||
- Проверено: Electron — редактор на 1280/375 px, отсутствие элементов редактирования в обычном режиме, запуск, запреты активной группы, режимы, порядок, ошибка создания и повтор, перенос трека, удаление группы с сохранением треков, сохранение черновика офлайн и при удалении извне, подтверждение отмены, офлайн-запуск и отсутствие горизонтального переполнения. Реальный короткий WAV через Controller + MediaPlayer без сервера: повтор, остановка, переход через пустую группу и остановка последней группы. Стенды и снимки находятся в `/tmp/ed056-ui`, аудиостенд — `/tmp/ed056-audio.cjs`.
|
||||
- Проверено: ручное ревью целевого diff по существующим паттернам screen, границам IPC/API, сохранению данных и совместимости; независимое статическое ревью ядра, редактора и обработчиков ошибок. Обнаруженные гонки исправлены и покрыты тестами; блокирующих замечаний не осталось.
|
||||
- Ограничения: редактирование требует сервера с API ED-055; офлайн используются подготовленные группы и файлы. Новые зависимости, backend API и миграции не добавлялись.
|
||||
- Не проверено: звук на физическом оборудовании площадки и установленный релизный пакет. Развёртывание, commit и push не выполнялись; для использования изменений требуется обновить screen.
|
||||
|
||||
### ED-055 — Группы музыкального плейлиста
|
||||
|
||||
- Статус: `DONE`
|
||||
- Репозитории: `evening_detective_server`, `evening_detective_frontend`; совместимость `evening_detective_screen`.
|
||||
- Цель: именованные группы внутри плейлиста с порядком групп и треков, режимами повтор / остановка / следующая группа.
|
||||
- Результат: группы создаются, переименовываются, переставляются и удаляются без удаления их треков; треки назначаются группе или остаются без группы. Новая группа повторяется по умолчанию. «Играть группу» сразу запускает первый трек; переход пропускает пустые группы и останавливается в конце списка. Старое воспроизведение всего плейлиста сохранено.
|
||||
- Результат: сервер защищает активные и приостановленные группы во всех использующих их играх. Перестановка групп заблокирована до остановки плейлиста; переименование доступно. Выбор следующего трека выполняется под блокировками плейлиста и состояния, запоздавшие/повторные события окончания не перезаписывают новую команду. Переупорядочивание и удаление других треков сохраняют текущий файл и позицию.
|
||||
- Результат: редактор сохраняет черновики при обновлении и удалении группы извне; исправлено пересоздание редакторов позиционными обёртками NSpace. Строковые int64 из protobuf JSON учитываются при сравнении версий и вычислении позиции паузы. Добавлены protobuf API и миграция `20261027120000_playlist_groups.sql`; группы, режимы, порядок и переназначенные ID переносятся экспортом/импортом. Старые пакеты без групп поддерживаются.
|
||||
- Результат: нативный плеер сохраняет выбранную группу при паузе, продолжении, громкости и повторном запуске трека; повтор единственного трека перезапускает аудио. Управление треками и режимом группы выполняется через сайт. При потере связи выбранная группа останавливается вместо перехода в общий список; отдельный нативный редактор и автономный каталог групп не добавлялись.
|
||||
- Проверено: генерация protobuf в трёх репозиториях; `gofmt`; полный `go test ./...` с отдельной PostgreSQL через `TEST_DATABASE_URL`, включая конкурентные окончания, права/ошибки, защиту редактирования, экспорт/импорт и старые пакеты; frontend `type-check`, `lint`, `lint:css`, `build`; native `type-check`, `lint`, `lint:css` и все 218 тестов; `git diff --check`.
|
||||
- Проверено: Firefox на 1280/375 px — режим по умолчанию, запуск/пауза/продолжение, запреты редактирования, порядок групп, ошибка создания и повтор, перенос трека, сохранение удалённого извне черновика и отсутствие горизонтального переполнения. Реальный короткий WAV в браузере — повтор одного трека, остановка, переход через пустую группу, повтор запроса после временной ошибки; строковые версии 9→10 и 9007199254740995 передаются точно. Скриншоты и временные стенды оставлены в `/tmp`.
|
||||
- Проверено: ручное ревью diff по `GO_STANDARD.md` и `FRONTEND_CODE_STANDARD.md`; независимое статическое ревью блокировок, согласованности каталога и сохранения черновиков. Блокирующих замечаний не осталось.
|
||||
- Не проверено: звук на физическом оборудовании площадки и развёртывание. Production-миграция не выполнялась; для включения функции нужны миграция БД и обновление сервера/клиентов. Commit/push не выполнялись.
|
||||
|
||||
### ED-053 — Инструкция перед QR команды
|
||||
|
||||
- Статус: `DONE`
|
||||
- Цель: в PDF и чеках сначала краткая инструкция Wi-Fi, затем QR, ниже название команды; предпросмотр соответствует чеку.
|
||||
- Критерии: текст помещается при предельных длинах, QR сохраняет размер и читаемость; без Wi-Fi печатаются QR и название. API и настройки не меняются.
|
||||
- Проверка: тесты рендеринга, просмотр образцов и декодирование QR; `gofmt`, `go test ./...`, ручное ревью по GO_STANDARD.md.
|
||||
- Результат: общий текст сокращён до подключения к сети, пароля, напоминания остаться без интернета и сканирования QR. В PDF, чеках и предпросмотре инструкция сверху, затем QR, ниже название команды. При пустой сети — QR и название; размеры QR сохранены.
|
||||
- Проверено: `gofmt`, `go test ./...`, целевые тесты печати (включая предельные длины и регрессию порядка QR/названия), `git diff --check`; ручное ревью diff по GO_STANDARD.md. Образцы PDF и чека просмотрены; три QR из PDF/PNG декодированы `zbarimg`.
|
||||
- Не проверено: физическая печать и сканирование телефоном на площадке. Commit/push не выполнялись.
|
||||
|
||||
|
||||
### ED-052 — Печатать инструкцию подключения к Wi-Fi рядом с QR команды
|
||||
|
||||
- Статус: `DONE`
|
||||
- Цель: название сети и пароль задаются в настройках каждой игры и печатаются в PDF и чеках, включая предпросмотр.
|
||||
- Решение: при пустом названии сети инструкция отсутствует; пустой пароль означает открытую сеть. Печать доступна онлайн и на площадке. Настройки переносятся в пакете игры и доступны для редактирования только управляющим игрой.
|
||||
- Критерии: настройки сохраняются и очищаются; старые клиенты не стирают их; старые пакеты импортируются; текст помещается, QR читается. PDF с Wi-Fi содержит шесть карточек на листе.
|
||||
- Проверка: тесты хранения, прав, экспорта/импорта, валидации и рендеринга; `go test ./...`; генерация protobuf; frontend type-check, lint, lint:css и build; ручное ревью стандартов.
|
||||
- Ограничения: без Wi-Fi QR, новых зависимостей, commit и push. Проверка физического принтера и телефонов отдельно на площадке.
|
||||
- Результат: добавлены поля игры, миграция `20261023120000_game_wifi.sql`, optional-поля обновления и форма с маскированным паролем. Параметры возвращаются только управляющим игрой; игрокам и в списки не выдаются. Старый клиент сохраняет настройки, явные пустые значения очищают их.
|
||||
- Результат: PDF содержит 6 карточек при заданной сети, чек и его предпросмотр включают одинаковую инструкцию. Текст переносится, длинное название команды на чеке уменьшается при необходимости; размер QR сохранён. Пустая сеть отключает инструкцию, пустой пароль обозначает открытую сеть. Экспорт/импорт переносит параметры без изменения версии пакета; старые пакеты совместимы.
|
||||
- Проверено: ручное ревью всего diff по `GO_STANDARD.md` и `FRONTEND_CODE_STANDARD.md`, `gofmt`, `git diff --check`; `make generate`, `npm run proto:gen`; `go test ./...` с отдельной PostgreSQL (включая реальные миграции, сохранение/очистку, старых клиентов и экспорт→импорт); `npm run type-check`, `npm run lint`, `npm run lint:css`, `npm run build` — успешно.
|
||||
- Проверено: браузерный smoke на 390 и 1440 px — загрузка полей, маскировка пароля, валидация, сохранение пробелов пароля, ошибка сервера, защита от повторной отправки и очистка. Образцы PDF и чеков просмотрены, 8 QR из PDF и PNG успешно декодированы `zbarimg`; предельные длины покрыты тестами.
|
||||
- Ограничения проверки: физический принтер, телефон и подключение к реальному Wi-Fi не проверялись. Рабочая БД и серверы не обновлялись; при запуске нужна миграция. Для изменения уже подготовленного офлайн-пакета требуется новый экспорт. Commit/push не выполнялись.
|
||||
|
||||
|
||||
### ED-051 — Перенести идеи пульта во вкладку «Экраны»
|
||||
|
||||
- Статус: `DONE`
|
||||
- Цель: перенести согласованные идеи `evening_detective_screen` на вкладку «Экраны» страницы игры.
|
||||
- Результат: предпросмотр и подключение экранов расположены сверху; ниже адаптивные колонки плана экранов и музыки. Добавлены миниатюры всех шагов, выделение текущего шага, компактные кнопки и ползунки громкости; перемотка удалена.
|
||||
- Результат: редактор музыки отделён от управления воспроизведением. Создание, переименование, загрузка MP3, удаление и перестановка треков используют ID редактируемого плейлиста. Назначение музыки игре выполняется явно; черновики сохраняются при поллинге и ошибках, конфликты внешних изменений показываются пользователю.
|
||||
- Результат: пауза, продолжение и громкость основного медиа сохраняют позицию; повтор текущего музыкального трека обрабатывается проигрывателем. Устаревшие ответы поллинга музыки не перезаписывают команды. Добавлены проверки ввода таймера, текста и MP3, блокировка повторных запросов и сообщения об ошибках.
|
||||
- Проверено: `node tests/screens-control.mjs`, `npm run type-check`, `npm run lint`, `npm run lint:css`, `npm run build-only`, `git diff --check` — успешно. Diff вручную проверен по FRONTEND_CODE_STANDARD.md.
|
||||
- Проверено: Firefox на 1280 и 375 px, отсутствие горизонтального переполнения и автозапуска медиа миниатюрами, таймер и музыка, громкость мышью и клавиатурой, черновик плана после поллинга, независимый выбор плейлиста, ошибка сохранения порядка и повтор, переименование, отключение экрана и ошибка API. Браузерные проверки выполнены на локальных синтетических ответах API.
|
||||
- Ограничения: сервер, protobuf, Electron и зависимости не изменялись. Реальный внешний дисплей и production не проверялись; предпросмотр отражает данные API, без точного прогресса и подтверждённого состояния медиапроигрывателя. Commit/push не выполнялись.
|
||||
|
||||
### ED-049 — Оптимизировать медиа пакета локальной игры
|
||||
|
||||
- Статус: `DONE`
|
||||
@@ -418,3 +509,36 @@
|
||||
- Автоматические проверки: `go test ./...`; фронтенд — `npm run type-check`, `npm run lint`, `npm run lint:css`, `npm run build`; приложение экрана — те же проверки, сборка и `npm test` (203/203). Миграция проверена дважды на временных таблицах PostgreSQL: надписи, порядок, текущий шаг, неизменность остальных шагов и повторный запуск корректны.
|
||||
- GUI: целевой проход восьми шагов Electron завершился `ED050_TEXT_SCREENS_PASS [1,2,8,4,8,6,7,8]`; обе надписи проверены в DOM. Общий smoke не завершился: `Timeout: volume slider keyboard update`; устаревшие ожидания автопаузы музыки в нём исправлены, код проигрывателя не менялся.
|
||||
- Ограничения: production-миграция не запускалась; сервер, сайт и приложение экрана требуют согласованного обновления. Коммиты и push не выполнялись.
|
||||
|
||||
### ED-054 — QR-экран, список команд и типы таймера
|
||||
|
||||
- Статус: `DONE`
|
||||
- Результат: добавлены режимы QR (ссылка HTTP/HTTPS и необязательный текст) и списка команд; три типа таймера с исходной надписью и сохранением пользовательского текста при смене типа. Настройки доступны в веб-панели и приложении экрана, работают предпросмотры и браузерный вывод `/screen`.
|
||||
- Команды: только названия активных регистраций, по русскому алфавиту; обновление каждые пять секунд, сохранение последнего снимка по ключу игры в приложении экрана, восстановление без сети после перезапуска. При ошибке предыдущий список сохраняется; при смене игры очищается.
|
||||
- Совместимость: старые планы и хеши офлайн-пакетов сохранены, таймеры без типа означают «Перерыв» без замены собственного текста. Исправлена инициализация общего состояния таймера при первом подключении к шагу без длительности. Новый `GetScreenTeams` передаёт токен в теле POST; ответ содержит только ID и название.
|
||||
- Миграция: `20261023130000_screen_qr_timer_type.sql` добавлена в сервер и `prod/migrations`; на рабочей БД не применялась.
|
||||
- Проверки: штатная генерация protobuf во всех трёх приложениях; `go test ./...`; интеграционные тесты PostgreSQL для экранов, миграций и команд; 208 тестов приложения экрана; type-check, lint, lint:css и сборки обоих Vue-приложений; `node tests/screens-control.mjs`; Electron smoke предпросмотров 1280×720 / 1024×768 с QR и 32 длинными названиями; QR декодирован со снимка; Firefox smoke QR на ширинах 1280/375/160, списка и реального `/screen` с тестовыми API-ответами. Проверены ошибки сети, старые пакеты, сохранение снимка и изоляция игр. Diff вручную проверен по стандартам Go и фронтенда, `gofmt` и `git diff --check` — без замечаний.
|
||||
- Ограничения: новые анимации отложены по согласованию; реальный проектор не проверялся. Публикация, commit и push не выполнялись.
|
||||
|
||||
### ED-059 — Отдельная страница плейлистов
|
||||
|
||||
- Статус: `DONE`
|
||||
- Цель: `/playlists` для авторов и организаторов с текущими операциями; редактор в игре сохраняется и переиспользуется.
|
||||
- Критерии: общий редактор и API-действия; защита черновиков; состояния загрузки, ошибки, пустого списка и отсутствия доступа; пункт меню.
|
||||
- Проверка: type-check, lint, lint:css, build; smoke операций и регрессии музыки в игре.
|
||||
- Ограничения: без новых зависимостей, API и предпросмотра звука; без commit/push.
|
||||
- Результат: добавлены `/playlists` и пункт меню для авторов/организаторов; редактор и API-действия общие со страницей игры. Сохранены операции, MP3-валидация, блокировки, синхронизация и черновики; добавлено подтверждение ухода. API и зависимости не менялись.
|
||||
- Проверено: `npm run type-check`, `npm run lint`, `npm run lint:css`, `npm run build`, `git diff --check`; ручное ревью diff по FRONTEND_CODE_STANDARD.md. `python3 tests/venue/playlists.py` прошёл: ошибка/повтор, пустой список, создание/выбор/переименование/удаление, пустой MP3 и загрузка, порядок и группы, отказ сохранения с сохранением черновика, роли, route guard, клавиатура, 1280/375 px. Отдельный браузерный smoke музыки в игре прошёл: play/pause/resume, активная группа, режимы, порядок, ошибки, черновик удалённой группы, 1280/375 px.
|
||||
- Ограничения проверки: браузерные тесты используют изолированный тестовый API; рабочий сервер и реальное воспроизведение MP3 не проверялись. Commit/push не выполнялись.
|
||||
|
||||
### ED-060 — Загружать MP3 сразу в нужную группу
|
||||
|
||||
- Статус: `DONE`
|
||||
- Цель: кнопка загрузки в каждой группе общего редактора; трек сразу сохраняется в выбранной группе.
|
||||
- Критерии: единый запрос и транзакция вставки с groupID; проверка принадлежности и активности группы; совместимость старых запросов без groupID; обе страницы.
|
||||
- Проверка: Go-тесты, интеграционная проверка PostgreSQL, генерация API, type-check, lint, lint:css, build и браузерный smoke.
|
||||
- Ограничения: без новых зависимостей, миграций, пакетной загрузки и commit/push.
|
||||
- Результат: «Добавить MP3» находится в каждой группе, включая «Без группы», на странице плейлистов и внутри игры. `groupID = 5` передаётся одним запросом; repository проверяет группу и её использование под существующей блокировкой и атомарно вставляет трек с группой. Запросы без поля сохраняют прежнюю загрузку без группы; очистка файла при отказе остаётся в существующем service flow. Обновлены все callers и generated API.
|
||||
- Проверено: `make generate`, `npm run proto:gen`, `gofmt`, `go test ./...`; полный набор тестов `playlists_repo` с `TEST_DATABASE_URL` на отдельной локальной PostgreSQL прошёл, включая пустую/заполненную/чужую/удалённую/активную группу и отсутствие вставки при отказе. `npm run type-check`, `npm run lint`, `npm run lint:css`, `npm run build`, `git diff --check` прошли; diff проверен по Go- и frontend-стандартам.
|
||||
- Браузер: `python3 tests/venue/playlists.py` — прямое назначение группы одним запросом, отказ сервера с сохранением черновика, операции редактора и 375/1280 px. Дополнительный игровой smoke `/tmp/ed060-game-upload-browser.py` — загрузка в группу через GameMusicPlanPanel, блокировка активной группы, доступность другой группы и регрессия воспроизведения/групп/черновиков.
|
||||
- Ограничения проверки: браузер использует изолированный API; рабочее файловое хранилище и звучание MP3 не проверялись. Новому фронтенду для назначения группы нужен обновлённый бэкенд. Commit/push не выполнялись.
|
||||
|
||||
Reference in New Issue
Block a user