M2: бот и headless-прогон матчей

- PlayerView: проекция состояния, в которой боту видно только то,
  что видно живому игроку (своя рука, стол, размеры чужих рук, счётчики)
- BasicBot: политика из GAMEPLAY.md, полностью детерминированная
- Match: обёртка с состоянием и подпиской на события (её же возьмёт UI)
- runMatch: прогон матча без движка и без таймеров
- soak-тесты: 3500 полных матчей (боты и случайные легальные ходы,
  2-4 игрока), инварианты состояния проверяются после каждого действия
- npm run stats:bot — распределение исходов самоигры

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
ftc
2026-09-13 10:43:06 +03:00
co-authored by Claude Opus 5
parent fddab60527
commit c60fbcbb94
19 changed files with 927 additions and 13 deletions
+16
View File
@@ -0,0 +1,16 @@
// Config for the measuring tools under tests/tools, which are deliberately not
// part of the suite: `npm run stats:bot`.
import { defineConfig } from 'vitest/config';
import { resolve } from 'node:path';
export default defineConfig({
resolve: {
alias: {
'@core': resolve(__dirname, 'assets/scripts/core'),
},
},
test: {
include: ['tests/tools/**/*.stats.ts'],
environment: 'node',
},
});