159 lines
21 KiB
Markdown
159 lines
21 KiB
Markdown
# Завершённые задачи
|
||
|
||
Архив задач, переведённых в статус `DONE`.
|
||
|
||
### ED-030 — Индикатор среды сервиса в интерфейсе
|
||
|
||
- Статус: `DONE`
|
||
- Репозитории: `evening_detective_server`, `evening_detective_frontend`.
|
||
- Связь: дополнение к ED-029; не требует готовности DNS/HTTPS и Cudy.
|
||
- Цель: пользователь видит, к какой среде подключён интерфейс: `PROD` или `VENUE`.
|
||
- Решение: показывать компактную подпись среды в общем интерфейсе рядом с навигацией; получать среду от подключённого бэкенда по фактическому режиму запуска (`APP_MODE=venue` — площадка, штатный онлайн-режим — production).
|
||
- Критерии: подпись видна на компьютере и телефоне; PROD и VENUE различаются текстом, а не только цветом; среда определяется сервером, а не адресом сайта или настройкой сборки фронтенда; при загрузке или ошибке получения среды интерфейс не показывает неподтверждённый PROD/VENUE.
|
||
- Ограничения: без переключения серверов, изменения игровых правил, показа секретов, новых зависимостей и изменения папки `prod`; использовать существующую навигацию, API и стандарты обоих репозиториев.
|
||
- Проверка: ручной прогон обоих режимов и недоступного API; Go-тесты; frontend type-check, lint, lint:css и build; при изменении protobuf — штатная генерация обоих клиентов.
|
||
- Результат: поле `environment` добавлено в существующий публичный GetPermissions API; значение определяется тем же режимом запуска бэкенда, который отключает внешние интеграции площадки. В HeaderMenu добавлены русские подписи «Сервер» (PROD) и «Локальная сеть» (VENUE) через Naive UI; загрузка, неизвестная среда и ошибки не подменяются production. Сведения меню хранятся в общем UI-store; устаревшие ответы не заменяют новые, а права не применяются после смены токена.
|
||
- Проверки: штатные `make generate` и `npm run proto:gen`, `gofmt`, `go test ./...`, `npm run type-check`, `npm run lint`, `npm run lint:css`, `npm run build` и `git diff --check` прошли. Табличный Go-тест проверяет оба режима для гостя, пользователя и администратора. Firefox headless с подменой API проверил PROD/VENUE до и после входа, загрузку, серверную и сетевую ошибки, неизвестное значение; подпись находится внутри viewport при ширине 1440 и 390 px.
|
||
- Ревью: diff проверен по стандартам обоих репозиториев; зависимости не добавлены, generated-файлы получены штатной генерацией. Сборочные изменения `dist` исключены из diff; папка `prod` и существующие локальные артефакты бэкенда не менялись.
|
||
- Ограничение проверки: реальные Android/iPhone и развёртывание обновлённой версии не проверялись; для появления индикатора нужно обновить бэкенд и фронтенд. Миграция БД не требуется. Commit и push не выполнялись.
|
||
|
||
### ED-028 — Роль разработчика и общий таскменеджер
|
||
|
||
- Статус: `DONE`
|
||
- Репозитории: `evening_detective_server`, `evening_detective_frontend`
|
||
- Результат: добавлены роль `developer`, выдача и отзыв роли на странице пользователей, право `tasks_page` и общая доска `/tasks` для разработчиков и администратора. Реализованы четыре статуса, создание и редактирование, назначение разработчика, необязательная календарная дата завершения, фильтр по ответственному, перенос карточек и удаление с подтверждением. PostgreSQL хранит задачи; версии защищают от конкурентной перезаписи, форма сохраняет черновик при конфликте. При отзыве роли прежнее назначение сохраняется; при удалении пользователя задача сохраняется без ссылок на него.
|
||
- Стандарты: ручное ревью всего diff по `GO_STANDARD.md` и `FRONTEND_CODE_STANDARD.md` выполнено; новые зависимости не добавлены; API сгенерирован штатными командами; сборочные изменения `dist` исключены из diff.
|
||
- Проверки: `make generate`, `npm run proto:gen`, стандартный `go test ./...`, `npm run type-check`, `npm run lint`, `npm run lint:css`, `npm run build` и `git diff --check` пройдены. Интеграционный `go test ./internal/repos/tasks_repo -count=1 -v` с отдельной `TEST_DATABASE_URL` пройден: ограничения БД, назначения, смена статусов, конкурентные записи, удаление пользователей и миграция Up/Down. Шесть тестов дедлайна пройдены в `Asia/Barnaul` и `America/Los_Angeles`.
|
||
- Проверка браузера: Firefox headless с подменой API — создание, назначение ответственного и даты, редактирование, сохранение черновика при конфликте, перетаскивание, подтверждение удаления и отказ пользователю без роли; мобильная ширина 380 px, горизонтальная прокрутка только внутри доски. Полный сценарий с работающим production-сервисом не запускался.
|
||
- Известное ограничение проверки: дополнительный полный `go test ./...` с `TEST_DATABASE_URL` обнаружил существующие ошибки игровых фикстур в `answer_service`, `game_service`, `gameplay_service`, `participation_service` (временные таблицы не соответствуют текущей схеме). Эти тесты не менялись; стандартный полный прогон и новые интеграционные тесты проходят.
|
||
- Запуск: применить миграцию `20261007130000_create_developer_tasks.sql` штатным процессом миграций и выдать пользователю роль на странице `/users`; после нового входа доступна `/tasks`. Production-миграции, commit и push не выполнялись.
|
||
|
||
### ED-020 — Музыка из плейлиста на экранах игры
|
||
|
||
- Статус: `DONE`
|
||
- Приоритет: `P1`
|
||
- Репозитории: `evening_detective_server`, `evening_detective_frontend`
|
||
- Результат: добавлены общие MP3-плейлисты и треки, назначение default-плейлиста сценарию и выбор музыки для игры. Состояние музыки хранится на уровне игры и синхронизируется через существующий polling экранов; добавлены play/pause/stop, выбор трека, громкость, loop, автопереход и единственный экран со звуком. Добавлены UI управления во вкладке «Экраны» и выбор плейлиста в редакторе сценария.
|
||
- Проверки: `GOCACHE=/tmp/evening-detective-go-cache go test ./...`, `npm run type-check`, `npm run lint`, `npm run lint:css`, `npm run build` и `git diff --check` пройдены; protobuf сгенерирован штатными командами.
|
||
- Ручная проверка: не выполнялась в среде агента; требуется проверить загрузку MP3 от ролей, воспроизведение на двух экранах, автопереход, loop и переподключение.
|
||
|
||
### ED-027 — Упростить экран игры организатора
|
||
|
||
- Статус: `DONE`
|
||
- Приоритет: `P1`
|
||
- Репозиторий: `evening_detective_frontend`
|
||
- Результат: админский экран игры разделён на вкладки «Игра», «Команды», «Экраны» и «Карта». Вкладка «Игра» открывается по умолчанию и содержит статус, таймер, управление состоянием и служебные действия; выбранная вкладка хранится в query-параметре `tab` и восстанавливается после обновления. Существующие панели, API и игровая логика сохранены.
|
||
- Проверки: `npm run type-check`, `npm run lint`, `npm run lint:css`, `git diff --check` пройдены.
|
||
- Ручная проверка: не выполнялась в среде агента; требуется проверить переключение вкладок и основные действия на реальном экране организатора, включая узкую ширину.
|
||
|
||
### ED-015 — План экранов игры для организатора
|
||
|
||
- Статус: `DONE`
|
||
- Приоритет: `P1`
|
||
- Репозитории: `evening_detective_server`, `evening_detective_frontend`
|
||
- Результат: добавлен необязательный план экранов игры с линейными шагами, текущим индексом и параметрами текста и таймера. Организатор может создать, изменить, удалить и переставить шаги, а также перейти на любой шаг; состояние применяется ко всем подключённым экранам и повторно применяется при привязке нового экрана. Добавлен текстовый режим экрана. Игры без плана продолжают работать через существующее ручное управление; синхронизация использует текущий polling.
|
||
- Проверки: целевые backend-пакеты и `screen_plan_service` проходят; frontend `npm run type-check`, `npm run lint`, `npm run lint:css`, `npm run build` и `git diff --check` пройдены; protobuf сгенерирован штатными командами. Полный backend `go test ./...` дополнительно упирается в sandbox-запрет `listen tcp` в gateway-тестах.
|
||
- Ручная проверка: не выполнялась в среде агента; требуется проверить реальными экранами создание плана, переходы, синхронизацию нескольких дисплеев и переподключение.
|
||
|
||
### ED-016 — Привязка экрана к игре через сканер
|
||
|
||
- Статус: `DONE`
|
||
- Репозитории: `evening_detective_server`, `evening_detective_frontend`
|
||
- Результат: на странице игры добавлено сканирование QR-кода экрана с немедленной привязкой к текущей игре; список экранов показывает онлайн/оффлайн-состояние и предупреждает о недоступности более минуты. Сервер разрешает управление организатору и администратору, корректно перепривязывает экран и переносит текущее состояние целевой игры.
|
||
- Проверки: `GOCACHE=/tmp/evening-detective-go-cache go test ./...`, `npm run type-check`, `npm run lint`, `npm run lint:css`, `git diff --check` пройдены.
|
||
|
||
### ED-026 — Количество игроков при создании команды из панели игры
|
||
|
||
- Статус: `DONE`
|
||
- Приоритет: `P1`
|
||
- Репозитории: `evening_detective_server`, `evening_detective_frontend`
|
||
- Результат: в форме создания команды на `GamePage` добавлено количество игроков со значением `1` по умолчанию и диапазоном `1–8`. Значение передаётся через `AddTeam` и сохраняется в существующем `teams.participants_count`; старые flow без значения сохранены.
|
||
- Проверки: `go test ./...`, `npm run type-check`, `npm run lint`, `npm run lint:css`, `npm run build` пройдены; protobuf сгенерирован штатными командами; `git diff --check` пройден.
|
||
|
||
### ED-023 — Оценка сложности игры в отзыве и каталоге
|
||
|
||
- Статус: `DONE`
|
||
- Приоритет: `P1`
|
||
- Репозитории: `evening_detective_server`, `evening_detective_frontend`
|
||
- Результат: в отзыв добавлена обязательная оценка сложности `1–3`; значение хранится в существующей таблице отзывов и передаётся через protobuf. Средняя сложность считается по одобренным отзывам завершённых игр сценария и отображается как «лёгкая», «средняя» или «тяжёлая» в каталоге и карточке сценария. Старые отзывы поддержаны значением по умолчанию `2`; рейтинг `1–5`, модерация и запрет повторного отзыва сохранены.
|
||
- Проверки: `go test ./...` пройден с кэшем в `/tmp`; `npm run type-check`, `npm run lint`, `npm run lint:css` пройдены; protobuf сгенерирован штатными командами; `git diff --check` пройден.
|
||
|
||
### ED-012 — Строгий стандарт написания фронтенда
|
||
|
||
- Статус: `DONE`
|
||
- Репозиторий: `evening_detective_frontend`
|
||
- Результат: создан обязательный стандарт `docs/FRONTEND_CODE_STANDARD.md` как
|
||
единственный источник правил структуры, компонентов, composables, функций,
|
||
типов, API, состояния, стилей, форм, доступности и проверок. Фронтендный
|
||
`AGENTS.md` оставлен указателем и операционными правилами, а корневой
|
||
`AGENTS.md` содержит условную ссылку для задач фронтенда.
|
||
- Проверки: проверены ссылки и однозначное размещение типовых видов кода;
|
||
`git diff --check` пройден; продуктовый код и зависимости не менялись.
|
||
|
||
### ED-025 — Доступ к БД только через repository
|
||
|
||
- Статус: `DONE`
|
||
- Репозиторий: `evening_detective_server`
|
||
- Результат: прямой доступ к БД из application flow убран; проверка доступности БД вынесена в `health_repo`, `screen_sessions_repo` — в `screen_service`, а `game_map_repo` — в `map_service`. Handlers используют сервисные модели и больше не импортируют эти repositories.
|
||
- Проверки: целевые backend-пакеты компилируются; `internal/app` проходит тесты; `git diff --check` пройден. Полные gateway-тесты в sandbox заблокированы запретом на `listen` TCP-порта.
|
||
|
||
### ED-011 — Строгий стандарт написания Go-бэкенда
|
||
|
||
- Статус: `DONE`
|
||
- Репозиторий: `evening_detective_server`
|
||
- Результат: добавлен обязательный стандарт `docs/GO_STANDARD.md` как
|
||
единственный источник правил Go-кода: слои, handlers, services, repositories,
|
||
modules с обязательными интерфейсами, mapping, protobuf, ошибки, SQL,
|
||
транзакции, тесты и именование. В backend `AGENTS.md` оставлены только ссылка
|
||
на стандарт, проектные ограничения и операционные команды.
|
||
- Проверки: `go test ./...` пройден; `git diff --check` пройден.
|
||
|
||
### ED-019 — Добавить кнопку экрана в меню организатора
|
||
|
||
- Статус: `DONE`
|
||
- Репозиторий: `evening_detective_frontend`
|
||
- Результат: в `HeaderMenu.vue` добавлен пункт `Экран` для пользователей с правом `games_page`; пункт ведёт на существующий маршрут `/screen`.
|
||
- Проверки: `npm run type-check`, `npm run lint`, `npm run lint:css` пройдены.
|
||
|
||
### ED-001 — Исправить `actions_count` в `GetGameAnswers`
|
||
|
||
- Статус: `DONE`
|
||
- Репозиторий: `evening_detective_server`
|
||
- Результат: `GetGameAnswers` теперь заполняет `Team.ActionsCount` через `GetActionsCountByTeamIDs`; контракт API не изменён.
|
||
- Проверки: `go test ./...` пройден; lifecycle-тест проверяет количество ходов в ответе для панели оценки.
|
||
|
||
### ED-011 — Считать сообщения без тригерной фразы продолжением диалога
|
||
|
||
- Статус: `DONE`
|
||
- Репозиторий: корневые правила агента
|
||
- Результат: удалено обязательное ожидание тригерной фразы перед продолжением диалога.
|
||
- Проверки: проверены `AGENTS.md` и `docs/agent/README.md`; продуктовый код не затрагивался.
|
||
|
||
### ED-005 — Исправить сброс настроек игры поллингом
|
||
|
||
- Статус: `DONE`
|
||
- Репозиторий: `evening_detective_frontend`
|
||
- Результат: настройки редактируются через локальный черновик и не перезаписываются поллингом.
|
||
- Проверки: type-check, lint и lint:css пройдены.
|
||
|
||
### ED-006 — Добавить страницу итогов игры
|
||
|
||
- Статус: `DONE`
|
||
- Репозиторий: `evening_detective_frontend`
|
||
- Результат: добавлена страница результатов, обработка ошибок и входы из админки и списка игр.
|
||
- Проверки: type-check, lint, lint:css и build пройдены.
|
||
|
||
### ED-007 — Добавить пьедестал победителя на странице итогов
|
||
|
||
- Статус: `DONE`
|
||
- Репозиторий: `evening_detective_frontend`
|
||
- Результат: добавлены баннер победителя, медали мест 1–3 и обработка ничьих.
|
||
- Проверки: type-check, lint, lint:css и build пройдены.
|
||
|
||
### ED-008 — Добавить создание игры из списка игр
|
||
|
||
- Статус: `DONE`
|
||
- Репозиторий: `evening_detective_frontend`
|
||
- Результат: добавлено создание игры из каталога сценариев, выбор даты и времени, отображение даты и исправлена передача RFC 3339 `startAt`.
|
||
- Проверки: type-check, lint и lint:css пройдены; build указан в отчёте плана.
|