# Отчёт сессии 3 (для следующей сессии) Дата: 2026-08-05 | Ветка: main | Этап 3 (ИИ ур. 1–3, эвристика) — завершён ## Что сделано 1. **Контракт packages/ai** зафиксирован в docs/INTERFACES.md до кода: chooseMove, AiLevel 1–3, LEVEL_ATARI_PROBABILITY {1:0.3, 2:0.6, 3:0.9}, приоритеты save-atari → capture-atari → nearby (Chebyshev ≤ 2) → random → pass, фильтр своего глаза, легальность только через applyMove из core. 2. **packages/ai реализован** (@go-learn/ai 0.1.0): ai.ts (chooseMove, роллы rng в фиксированном порядке — позиция в потоке не зависит от доски), candidates.ts (легальные + фильтр глаза), tactics.ts (атари, спасение по факту «>1 дамэ после хода» — контрзахват покрыт без частных случаев), pick.ts (равномерный/взвешенный выбор, nearby с весами 2/1). 3. **Тесты: 99/99** (74 + 25 новых): приоритеты на сконструированных позициях с rng-заглушками (0 / 0.99), фильтр глаза, Error при over, детерминизм (3 seed × 2 прогона полных партий), 12 партий бот-бот 9×9 до over ≤ 200 ходов с проверкой легальности каждого хода, perf-smoke, orphan-check. 4. **Perf: chooseMove 19×19 ≈ 7.7 мс** (критерий «ур.3 < 50 мс» с запасом). 5. Интеграционная правка main loop: return type в хелперах теста — lint 0 warnings (цель литании для нового кода). ## Что НЕ сделано - Этапы 4–9 не начаты. Воркер и протокол postMessage — этап 4 (по контракту). ## Подводные камни для следующей сессии - Среда: git worktree в $HOME, пересоздание (`git worktree remove --force` при «already checked out»), коммитить всё перед концом — незакоммиченное теряется; контракты дублировать в тексте задания субагенту. - packages без project references на core (TS6310 при `tsc -b --noEmit`) — резолв через workspace-симлинк; не «чинить». - docs/*.md — через prettier --write перед коммитом (format-гейт). - Ролл-семантика chooseMove задокументирована в шапке ai.ts: два ролла на ход всегда — менять порядок/число роллов = менять воспроизводимость партий, только через ADR. - Порог perf-теста 200 мс — машинно-зависимый; не ужесточать в CI. ## С чего начать продолжение Этап 4 (ИИ ур. 4–6, MCTS в Web Worker): 1. Сначала в docs/INTERFACES.md: протокол postMessage (запрос/ответ/отмена, сериализация позиции, бюджет времени, уровень) И контракт движка MCTS (UCT, плейауты по эвристикам этапа 3 — переиспользовать packages/ai). 2. Бюджеты: ур.4 — 300 мс, ур.6 — 1500 мс; таргет 9×9 и 13×13, на 19×19 — честное предупреждение в UI (этап 5). 3. Только однопоточный код — SharedArrayBuffer требует COOP/COEP, которых может не быть на шаред-хостинге. 4. Плейауты тоже через seeded Rng — реплеи MCTS воспроизводимы. 5. Создать docs/plans/plan-phase-4.md.