go-learn/docs/reports/session-4.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

63 lines
5.2 KiB
Markdown
Raw Permalink 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.

# Отчёт сессии 4 (для следующей сессии)
Дата: 2026-08-05 | Ветка: main | Этап 4 (MCTS ИИ ур. 46 + воркер) — завершён
## Что сделано
1. **Контракт MCTS + протокол postMessage** зафиксирован в docs/INTERFACES.md
до кода: chooseMoveMcts (UCT c=1.4, ленивая экспансия, лёгкий плейаут,
бюджеты {4:300, 5:800, 6:1500} мс, maxSimulations для тестов, topMoves до 3),
WorkerRequest/WorkerResponse (позиция — списком ходов, cancel → result).
2. **packages/ai/src/mcts.ts** — движок: лёгкая плейаут-политика (атари-реакция
вокруг последнего хода + случайные точки с фильтром глаза), оценка
scorePosition с komi, стоп по deadline/shouldStop/maxSimulations.
Детерминированная экспансия (захваты первыми) — задокументирована.
3. **worker-protocol.ts + worker.ts** — пересборка позиции из списка ходов с
валидацией, createWorkerHandler(port, deps?) с инжектируемыми часами;
браузерный self.onmessage опущен — подключает этап 5 (строка в комментарии).
4. **Тесты: 118/118** (+19): детерминизм, легальность 9×9/13×13, бюджет по
фейк-часам, shouldStop, захват в атари за 200 симуляций (smoke качества),
партия MCTS vs ур.3, протокол через фейк-порт, perf-smoke.
5. **Perf: ~147 симуляций за 300 мс на 9×9**; ур.6 на 13×13 ≈ 1500 мс wall —
критерий v1 №3 «<2 с» выполнен.
## Что НЕ сделано
- Этапы 59 не начаты. UI и реальное подключение воркера этап 5.
## Подводные камни для следующей сессии (этап 5)
- **Cancel в реальном Worker**: синхронный handler не примет сообщение во время
счёта (event loop). Варианты: чанкование chooseMoveMcts через setTimeout в
воркере (меняет код движка/обёртки через контракт!) или terminate воркера
- пересоздание (протокол stateless позиция передаётся списком ходов,
поэтому пересоздание дёшево). Рекомендация: terminate+recreate, код не трогать.
- **Сила MCTS ограничена** ~147 сим/300 мс на 9×9 (applyMove копирует
positionHashes O(n²) в плейаутах). Если на приёмке ур. 46 слабоваты
отдельная задача оптимизации core (хэш инкрементальный), через ADR.
- **19×19 для MCTS**: UI обязан показать честное предупреждение (спека этапа 4);
рекомендуемые таргеты 9×9 и 13×13.
- Среда: worktree в $HOME, пересоздание, коммитить всё; контракты дублировать
в задании; docs через prettier перед коммитом; project references не добавлять.
- Seed воркера: протокол передаёт seed в каждом choose UI формирует
(например, seed партии + requestId); это часть воспроизводимости реплеев.
## С чего начать продолжение
Этап 5 (игровой интерфейс) первый этап с реальным сайтом:
1. Astro в apps/web (проверить актуальную версию astro через npm view ДО
конфигов gotcha-llm-stale-configs; статический выход, без SSR).
2. Страница партии: packages/board render + input-редьюсер, выбор
доски/уровня/цвета, коми (defaultKomi + ручное), пас/сдаться/отмена/новая,
счётчики пленников, скачивание SGF (serializeSgf) и загрузка для просмотра
(parseSgf), режим подсказки на ур. 4+ (topMoves из MctsResult, дельта
после хода игрока).
3. Подключение worker.ts: строка подключения комментарий в worker.ts;
fallback: если Worker недоступен синхронный вызов в основном потоке
(fail-safe, с пометкой в UI).
4. Строки UI в один ресурсный файл с первого дня (спека).
5. Смоук вручную: визуальная проверка кадра из матрицы plan-phase-2.
6. Контракт: схема localStorage для настроек/прогресса партии в INTERFACES.md
ДО кода (version + checksum + миграция + roundtrip-тест).
7. Создать docs/plans/plan-phase-5.md.