go-learn/docs/reports/session-3.md
sab.code.lab 1c85091186 chore: восстановление репозитория из снапшота v0.3.1
Прежняя git-история утрачена при переносе проекта на машину владельца
(снапшот без .git). Хэши коммитов в docs/reports/* относятся к утраченной
истории.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-07 09:34:02 +02:00

4 KiB
Raw Blame History

Отчёт сессии 3 (для следующей сессии)

Дата: 2026-08-05 | Ветка: main | Этап 3 (ИИ ур. 13, эвристика) — завершён

Что сделано

  1. Контракт packages/ai зафиксирован в docs/INTERFACES.md до кода: chooseMove, AiLevel 13, 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 (цель литании для нового кода).

Что НЕ сделано

  • Этапы 49 не начаты. Воркер и протокол 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 (ИИ ур. 46, 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.