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

68 lines
4.9 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.

# Отчёт сессии 5 (для следующей сессии)
Дата: 2026-08-05 | Ветка: main | Этап 5 (игровой интерфейс) — завершён
## Что сделано
1. **Контракты этапа 5** в docs/INTERFACES.md до кода: схема localStorage
(конверт version+checksum FNV-1a, SettingsV1, recovered при битом состоянии)
и AiClient (ур. 13 синхронно, ур. 46 воркер, cancel=terminate+recreate,
fail-safe синхронный фолбэк с пометкой).
2. **apps/web (Astro 5.18.2, static, vanilla TS + DOM):**
- lib: storage.ts, ai-client.ts, game-store.ts (чистый: фазы
playing/scoring/viewer, гонка requestId, undo пары ходов, подсчёт с
toggle мёртвых, SGF-просмотр), territory.ts (карта территории для заливки);
- страницы: / (визитка) и /play (канва + полная панель: размер/уровень/
цвет/коми, чекбоксы, Пас/Сдаться/Отменить/Новая, счётчики пленников,
статус-строка с причинами MoveError, предупреждение 19×19 при ур. 46,
подсказки топ-3 с winRate и дельтой, скачивание/загрузка SGF);
- ui/strings.ts — все строки UI одним файлом; тёмная тёплая тема,
адаптивность.
3. **Тесты: 147/147** (+29: storage 7, ai-client 5, game-store 12, territory 3,
wiring 2), lint 0 warnings. **astro build PASS, dist 80K**, worker-chunk
9.75 kB. Браузерный смоук исполнителем: рендер доски, пас + ответ бота,
hidden-состояния.
4. Интеграционная правка main loop: astro 5.18.2 (MIT) добавлен в
THIRD_PARTY_LICENSES.md — лицензионный гейт.
## Принятые отклонения (задокументированы исполнителем)
- Astro 5.18.2 вместо 7.1.6: astro 6/7 требуют Node ≥22.12 (hardcoded в bin),
окружение Node 20.20.2. Записано в PROJECT_STATE.
- AiClient.fallback: boolean и StorageLike-инжекция в storage — дополнения
контрактов, поведение не меняют.
- eslint.config.js/.prettierignore/.gitignore += `**/.astro/`.
## Что НЕ сделано
- Этапы 69 не начаты.
- Ручная приёмка: критерии v1 №2 (партия vs ур.5 до подсчёта) и №5 (мобильный
Safari) — владельцем; визуальный смоук кадра — по матрице plan-phase-2.
## Подводные камни для следующей сессии (этап 6)
- Среда: worktree в $HOME, пересоздание, коммитить всё; контракты дублировать
в задании; docs через prettier; project references не добавлять; `.astro/`
в игноре — не пугаться генерируемого каталога.
- suggestDeadGroups грубовата (предлагает живые группы на разрежённых
позициях) — при работе с уроками «жизнь и смерть» это станет заметно;
кандидат на уточнение (через ADR, зона core).
- Строки UI — только через ui/strings.ts, новые строки туда же.
- Worker-chunk собирается Vite; при изменении packages/ai/src/worker.ts
пересобирать apps/web.
## С чего начать продолжение
Этап 6 (курс + цумэ-го):
1. Контракт форматов в docs/INTERFACES.md ДО кода: схема Markdown-урока
(разделы → уроки → шаги), формат интерактивной задачи (SGF-позиция +
условие успеха, проверяемое движком — не хардкод координат), схема
localStorage прогресса курса (version + checksum, ключ go-learn:progress).
2. Программа по спеке: дамэ/захват → атари/лестница/сеть → самоубийство и ко →
глаза, жизнь и смерть, ложный глаз → подсчёт/пас/конец → связь/разрезание →
углы-стороны-центр → 34 базовых дзёсэки → форма → простое ёсэ.
3. Цумэ-го ≥30 задач, фильтры, свободная лицензия с атрибуцией (CREDITS.md)
либо формат импорта.
4. «Мой прогресс»: уроки, задачи, серия дней.
5. Создать docs/plans/plan-phase-6.md.