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 jobplugin-coverage, E2Egame-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-плагинов (
kubiki…chapaev) с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 перенесены в jobdeploy, добавленыconcurrencyи.nojekyllв артефакт. - Добавлено: инструкция по включению источника «Воркфлоу» в
local-dev.md.
CI fix — test_config + Pages actions (2026-06-14)
- Исправлено:
test_settings_defaultsочищает env перед проверкой дефолтов (CI задаётDATABASE_URLна уровне workflow). - Исправлено:
docs.yml— actionsactions/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→ GitVerseMihaham/Table-Time; CI и deploy docs — триггер на веткуmaster. - Добавлено:
.gitignore—coverage/,.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); WSgame.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клиент делаетgetGameState—actions_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_id—actions_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