Files
agents/docs/agent/COMPLETED_TASKS.md
T
2026-10-10 14:32:07 +07:00

159 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Завершённые задачи
Архив задач, переведённых в статус `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 указан в отчёте плана.