ADR-0002 · Клиентский авторитет до фазы 3
Статус: принято · 2026-06-22
Контекст. Где исполняется движок и кто хранит истинное состояние партии — центральная развилка. Клиентский Scala.js (как в lab) проще и уже работает; серверный JVM/WebSocket нужен для честности, но это greenfield на 5–9 недель.
Решение. Авторитет фазозависимый: фазы 1–2 — клиентский (Scala.js в Web Worker, кубики Math.random(), легальность через chessground); с фазы 3 — серверный (JVM-jar движка за http4s/WebSocket: истинный GameState, серверный RNG с seed, валидация каждого хода, порт BotMatchRunner).
Последствия.
- Фаза 1 стартует быстро на готовом коде; фазы 1–2 — тонкий, но корректный срез будущей серверной системы (эволюция, не переписывание).
- Бесплатную анонимную игру читерить нечего; реплей-гейт аналитики (07 Контракт ingest и валидация движком) всё равно гарантирует легальность.
- Жёсткое следствие: рейтинги, ставки и человек-vs-человек невозможны до фазы 3 — клиентские кубики/легальность подделываемы.
- Фаза 3 несёт основной риск (нет транспорта/сессий/RNG ни в одном репо сегодня).
Альтернативы. Серверный авторитет с первого дня — competitive-ready сразу, но +5–9 недель до первого релиза и весь greenfield-риск авансом.