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

4.9 KiB
Raw Blame History

Отчёт сессии 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.