go-learn/docs/plans/plan-phase-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

53 lines
4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# План фазы 3: этап 3 — ИИ ур. 13, эвристика (packages/ai)
Обновлено: 2026-08-05 | Статус: выполнен (gates зелёные; perf chooseMove 19×19 ≈ 8 мс)
## Критические долги (реестр — в начале, III.5)
- Нет.
## Ключевые решения (не пере-решать)
- Отдельный пакет packages/ai — core остаётся чистыми правилами (рекомендация
отчёта сессии 2, принято).
- ИИ — синхронный чистый вычислитель; воркер появится в этапе 4 (MCTS),
протокол postMessage фиксируется там же.
- Случайность — только seeded Rng из core, передаётся параметром (детерминизм
= воспроизводимые партии и тесты).
- Легальность — только через applyMove из core; дублирование правил запрещено.
- Приоритеты и вероятности уровней — по контракту в docs/INTERFACES.md
(зафиксирован 2026-08-05 до кода).
- Простая эвристика глаза: все ортогональные соседи — свои камни, без анализа
диагоналей; осознанно грубо, ручной игры «подложить себе» бот не имитирует.
## Объём этапа 3
1. packages/ai (@go-learn/ai 0.1.0, зависимость @go-learn/core):
chooseMove + LEVEL_ATARI_PROBABILITY + типы по контракту.
2. Внутренние эвристики: поиск групп в атари (groupAt/liberties из core),
ходы-спасения (>1 дамэ после хода или контрзахват), ходы-захвата,
фильтр своего глаза, кандидаты nearby (Chebyshev ≤ 2), взвешенный выбор.
3. Корневой tsconfig: references += packages/ai (без project reference на core —
TS6310, см. PROJECT_STATE; резолв через workspace-симлинк).
## Тесты (гейт приёмки этапа)
- Детерминизм: одинаковый seed → идентичная последовательность ходов в полной
партии бот-бот (два прогона, сравнение SGF или списка ходов).
- Приоритеты: сконструированные позиции — при rng «всегда 0» (ролл < p)
бот спасает своё атари / забирает чужое; при rng «всегда 0.99» (ролл p)
приоритет пропускается.
- Фильтр глаза: бот не заполняет свой глаз при наличии других ходов.
- Легальность: все ходы бота в длинных партиях легальны (property: случайные
партии бот-бот до двух пасов, seed запинен; ни одного ok:false).
- Завершение: партия бот-бот 9×9 завершается (over) за разумное число ходов;
после over вызов chooseMove кидает Error.
- Perf-smoke: chooseMove на позиции 19×19 средней игры < 200 мс в CI-среде
(критерий приёмки «ур.3 < 50 мс на среднем ноутбуке» замер фактический,
число в отчёте сессии; порог в тесте с запасом, машинно-зависимый).
- Wiring: orphan-check по экспортам packages/ai.
## Критерий выхода
Все тесты зелёные + `npm run gates` зелёный. Полная партия 9×9 бот-бот
завершается корректно (предпосылка критерия приёмки v1 2 для ур. 5 в этапе 4).