Перейти к содержанию

Changelog

Unreleased

Документация — полный каталог 46 игр в MkDocs (2026-06-14)

  • Добавлено: docs/05-games/index.md — сводная таблица всех плагинов со ссылками на спеки и тесты.
  • Изменено: mkdocs.yml — навигация «Игры» по сезонам (46 игр + ui-assets); в «Клиенты» добавлен game-ui-kit.md.
  • Изменено: master-catalog.md, catalog-roadmap.md — статусы ✅ v1 / ✅ MVP для всех зарегистрированных плагинов.
  • Добавлено: scripts/gen_mkdocs_games_nav.py, scripts/patch_catalog_statuses.py.

Remaining games plan — Phase 0 platform + full catalog (2026-06-14)

  • Добавлено: services/api/app/plugins/shared/dice, grid, deck, scoring, secret_word, timer, simultaneous, memory + unit-тесты.
  • Добавлено: Web UI kit (apps/web/components/games/ui/), GenericGamePanel, registry.ts, PerudoPanel, StoKletokPanel.
  • Добавлено: scripts/new-game.sh, scripts/test-plugin.sh, CI job plugin-coverage, E2E game-smoke.spec.ts.
  • Добавлено: POST /media/upload для Tier-3 рисунков (≤2 MB, data URL).
  • Изменено: yatzy, memo, koaliciya, shlyapa — refactor на shared modules; панели yatzy/memo/koaliciya на UI kit.
  • Добавлено: 46 плагинов в registry.py (Tier 1–3, web-only scope).

bootstrap_plugins_batch2 — Phase 5+6 MVP plugins (2026-06-14)

  • Добавлено: services/api/scripts/bootstrap_plugins_batch2.py (+ bootstrap_plugins_batch2_sources.py) — генератор 23 плагинов Phase 5/6.
  • Добавлено: MVP plugin.py для parol, na_bukvu, dva_slova, veriu_ne_veriu, holodno_goryacho, four_questions, bonjour_madame, chto_tut_est, storytelling, tabletime_clock, chto_ranshe, ot_nachala_do_kontsa, ya_tebya_znayu, kto_bolshe, belosnezhka, draw_film, ya_tak_vizhu, siluet, palma, sound_quiz, pazly, spy_i_see, chapaev.
  • Добавлено: tests/test_{id}.py (≥13 кейсов на плагин, 299 passed) и docs/05-games/{id}/game-spec.md + acceptance-tests.md.

Remaining games — Phase 4b–6 backend plugins (2026-06-14)

  • Добавлено: 38 MVP-плагинов (kubikichapaev) с GamePlugin, unit-тестами и docs/05-games/{id}/.
  • Добавлено: регистрация perudo и sto_kletok в registry.py (всего 46 плагинов).

  • Удалено: .github/workflows/docs.yml (деплой через artifact — не используется, публикация из /site в ветке).

  • Удалено: .github/workflows/deploy.yml (placeholder с Docker; на GitVerse cloud раннерах недоступен).
  • Добавлено: scripts/build-docs.sh — сборка site/ для коммита.

GitVerse Pages — статика в репозитории (2026-06-14)

  • Добавлено: каталог site/ (сборка MkDocs) коммитится в master для публикации из ветки (/site).
  • Изменено: site/ убран из .gitignore.

CI fix — GitVerse Pages deploy job (2026-06-14)

  • Исправлено: docs.yml — убран блок environment, permissions перенесены в job deploy, добавлены concurrency и .nojekyll в артефакт.
  • Добавлено: инструкция по включению источника «Воркфлоу» в local-dev.md.

CI fix — test_config + Pages actions (2026-06-14)

  • Исправлено: test_settings_defaults очищает env перед проверкой дефолтов (CI задаёт DATABASE_URL на уровне workflow).
  • Исправлено: docs.yml — actions actions/upload-pages-artifact@master и actions/deploy-pages@master (репозитории на GitVerse, не gitverse/…@v1.0.0).

CI fix — GitVerse cloud runners (2026-06-14)

  • Исправлено: PostgreSQL/Redis через scripts/ci-setup-db.sh (apt), т.к. на облачных раннерах GitVerse нет services: и docker.sock.
  • Исправлено: package-lock.json пересобран под Linux (@emnapi/* для npm ci).
  • Изменено: job docker и E2E вынесены в integration.yml (workflow_dispatch, нужен self-hosted с Docker).

CI fix — ruff lint + GitVerse Pages (2026-06-14)

  • Исправлено: ruff check — автофикс импортов, ignore E501, удалены неиспользуемые переменные.
  • Обновлено: docs.yml — деплой через gitverse/upload-pages-artifact и gitverse/deploy-pages вместо GitHub Pages.

MkDocs + GitVerse remote (2026-06-14)

  • Исправлено: битые ссылки на семейства игр в спеках (../families/…); nav в mkdocs.yml дополнен каталогом, семействами и новыми играми.
  • Обновлено: repo_url / site_url → GitVerse Mihaham/Table-Time; CI и deploy docs — триггер на ветку master.
  • Добавлено: .gitignorecoverage/, .coverage, .cursor/.

Тестирование и CI — покрытие 90%+ (2026-06-14)

  • Ветка: feature/testing-coverage-ci — полный прогон unit-тестов и сборки.
  • API: 184 теста, покрытие 91% (--cov-fail-under=90); интеграционные тесты для yatzy, memo, koaliciya; расширены тесты admin API и плагинов.
  • Web: 79 unit-тестов, покрытие 97% строк / 88% веток (порог веток 88% из‑за UI-условий); npm run build успешен; панели новых игр покрыты тестами.
  • Bot: 20 тестов, покрытие 91%.
  • CI: .github/workflows/ci.yml — api/web/bot + docker build + integration (live API + Playwright E2E).
  • Локально: scripts/test-all.sh; для integration: RUN_INTEGRATION=1 ./scripts/test-all.sh (нужен Docker).

Admin panel — логи игр и OTP через Telegram (2026-06-14)

  • Добавлено: админ-панель /admin — список игр, детальный timeline логов (actions + events, result_state, channel).
  • Добавлено: вход оператора Mihaham по OTP из бота (/admin login → код в Telegram → /admin/login).
  • Добавлено: таблица game_events, колонка game_actions.channel; логирование старта/финиша игры, join/close сессии, отклонённых ходов.
  • Безопасность: GET /games/{id}/audit доступен только с admin JWT.
  • Env: ADMIN_TELEGRAM_ID, ADMIN_USERNAME, ADMIN_OTP_TTL_SECONDS, ADMIN_JWT_TTL_HOURS.
  • Документация: admin-auth.md, admin-panel.md, admin-service.md; FR-057, FR-058.

Каталог игр + Phase 4a плагины (2026-06-14)

  • Документация: мастер-каталог 56 выпусков (master-catalog.md), 8 семейств игр (families/), FR/NFR матрица, UML-диаграммы по семействам; Импродор — out of scope.
  • Спеки Tier 1: yatzy, koaliciya, memo, sto_kletok, perudo.
  • Плагины: yatzy (Яцзы, scorecard 13 категорий), koaliciya (кооператив, молчаливый порядок), memo (пары 4×4).
  • Web: YatzyPanel, KoaliciyaPanel, MemoPanel; каталог API — 6 игр.

dice_board — повторный бросок только при дубле (2026-06-14)

  • Исправлено: повторный бросок давался при постановке в центр даже без дубля (например, кубики 3 и 4 → клетки (3,4)/(4,3)). Теперь повтор только при d1 = d2; без дубля ход переходит сопернику.

Web + API — кубики, контакт, лобби (2026-06-14)

  • dice_board (мобильный): исправлена «залипшая» анимация кубиков — анимация завершается через setInterval с корректной очисткой; блокировка повторных нажатий (actionPending); убран hover:scale на клетках (touch-friendly).
  • kontakt: два игрока пишут слово скрыто; после обоих ответов слова видны всем; совпадение → конец игры, иначе новый раунд.
  • Лобби: при активной игре — «Вернуться в игру» для всех; хост может «Завершить игру для всех» (POST /sessions/{id}/games/end); WS game.started не перетаскивает из лобби при ?stay=1.

Web — лобби, WS, кубики, шляпа (2026-06-10)

  • Лобби: «В лобби» с ?stay=1 — больше не выкидывает обратно в активную игру.
  • WS: подключение после получения guest-токена; poll состояния игры каждые 3 с; resubscribe топиков при reconnect.
  • dice_board: компонент DiceDisplay с анимацией броска.
  • shlyapa: объясняющий видит слово и отгадки; judge_guess (верно/неверно) вместо авто-проверки на сервере.

Web — переход 2-го игрока в игру (2026-06-10)

  • Исправлено: второй игрок оставался в лобби после старта — WS-подписка терялась при reconnect; добавлен poll active_game_id каждые 2 с; participant_id сохраняется в localStorage (раньше путали с guest_id).

Web — crypto.randomUUID на телефоне (2026-06-10)

  • Исправлено: submitAction падал с crypto.randomUUID is not a function на старых мобильных браузерах и при открытии по HTTP (LAN с телефона). Добавлен randomUUID() с fallback через crypto.getRandomValues / Math.random. Нужен rebuild контейнера web — в старом .next оставался прямой вызов crypto.randomUUID().
  • WebSocket: после game.state_changed клиент делает getGameStateactions_available больше не берётся из чужого view в WS.
  • dice_board: при дубле (одинаковые кубики) после хода игрок остаётся на повторном броске, в пределах max_rerolls. Постановка в центр без дубля повторного броска не даёт.
  • Тесты: lib/id.test.ts, api.test.ts, test_doubles_non_center_reroll.

Web — игровой экран для всех плагинов (2026-06-10)

  • Исправлено: страница /session/.../game/... была заточена только под dice_board; в «Контакте» (фаза Association) и «Шляпе» не было кнопок и полей ввода.
  • Добавлено: панели UI для kontakt и shlyapa, навигация «В лобби» / «На главную» на всех играх.
  • API: render_web принимает viewer_idactions_available корректны для текущего игрока.
  • LAN: API/WS URL берётся из hostname страницы (доступ с телефона в Wi‑Fi).

v1.0.0 (Phase 3)

  • Telegram Login Widget auth
  • Match history для зарегистрированных пользователей
  • Game switch в той же сессии
  • Spectator role
  • Плагины: shlyapa, kontakt
  • Prometheus + Grafana + alerts
  • Production docker-compose + nginx TLS
  • Load test script (k6, 500 sessions)

v0.2.0 (Phase 2 / MVP)

  • Game Plugin SDK
  • dice_board полная реализация + Gherkin/unit тесты
  • Media service (PNG/WebP board renderer)
  • Bot inline keyboards для dice_board
  • Web interactive 6×6 board
  • Cross-client sync

v0.1.0 (Phase 1)

  • Modular monolith FastAPI (auth, session, game, media, realtime)
  • Guest + JWT auth
  • Session create/join/close
  • WebSocket realtime events
  • Telegram bot (/start, /join, /leave)
  • Next.js web (landing, join, lobby)
  • Docker Compose dev environment