# План этапа 6 — курс и цумэ-го Дата: 2026-08-06. Статус: завершён (413/413, dist 280 КБ). Предшественник: этап 5 (игровой UI) завершён, main = 4aee5b7 + hotfix play.html. ## Ключевые решения (не пере-решать) 1. Контент — оригинальный, авторский (не скачиваем чужие сборники цумэ-го): это снимает лицензионный вопрос; атрибуция — CREDITS.md. Спека допускает «свободная лицензия с атрибуцией ЛИБО формат импорта»; собственный контент строго безопаснее (ADR-0001, I.16). 2. Интерактив в Markdown — raw HTML-элемент ``, гидратация клиентским скриптом страницы. Никаких remark/rehype-плагинов и новых зависимостей. Теория читаема без JS (запасной текст внутри элемента). 3. Критерий успеха задачи — goal-предикат, вычисляемый движком (apps/web/src/lib/goals.ts поверх @go-learn/core), НЕ сравнение с координатами решения. Дерево вариантов в SGF — только автоответы соперника и подсказки. 4. Формальный глаз — упрощение v1 (пустая область 1–3 пункта, окружённая одним цветом); ложный глаз не отличаем, уроки про ложный глаз строятся на capture-target. Уточнение — через ADR, не в этой фазе. 5. Прогресс — ключ `go-learn:progress` (ProgressV1) в том же конверте version+checksum, API — расширение существующего storage.ts. Серия дней — чистая функция touchStreak. 6. Зона работы — apps/web + CREDITS.md + docs; packages/board и packages/ai не трогаем (goal-предикаты живут в apps/web). Исключение по ADR-0003: в core добавлена одна аддитивная функция buildPosition (parseSgf не умеет AB/AW), разметка connect — CR вместо MA. 7. Параллельные ветки: stage-6-core (механика: goals, storage, виджет, страницы, строки) и stage-6-content (уроки, цумэ-го, CREDITS, контентные тесты). Мерж: core → content. ## Объём - Механика: goals.ts (4 предиката + формальные глаза), прогресс в storage.ts, виджет задачи (канва board, автоответы по дереву, сброс/подсказка), страницы /learn, /learn/[id], /tsumego, /progress, навигация, strings.ts. - Контент: 10 уроков (по разделу каждый, программа из мастер-промпта), ≥30 цумэ-го (difficulty 1–5, ≥3 на градацию), задачи для уроков (≥1 интерактив там, где уместно), CREDITS.md. - Тесты: goals (все предикаты + ложный/формальный глаз), storage roundtrip прогресса, touchStreak (вчера/сегодня/разрыв), валидация контента (все TaskV1 парсятся, SGF легальны движком, goal-разметка присутствует, id уникальны, у уроков валидный frontmatter и существующие task-id), wiring-страниц. ## Приёмка этапа - npm run gates зелёные (0 warnings), astro build PASS. - ≥10 уроков, ≥30 цумэ-го, фильтры работают, прогресс и серия дней сохраняются в localStorage (roundtrip). - Страница урока читаема без JS (проверка отключением гидратации). - Вес страниц остаётся скромным (жёсткий бюджет ≤300 КБ — гейт этапа 7, но не раздуваем заранее). ## Риски - suggestDeadGroups грубовата (PROJECT_STATE) — two-eyes предикат пишем собственный, на неё не опираемся. - Контент-объём большой: качество SGF важнее количества сверх минимума; валидационный тест — обязательный страховочный гейт.