chore: восстановление репозитория из снапшота v0.3.1
Прежняя git-история утрачена при переносе проекта на машину владельца (снапшот без .git). Хэши коммитов в docs/reports/* относятся к утраченной истории. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
commit
1c85091186
184 changed files with 33303 additions and 0 deletions
76
docs/reports/session-6.md
Normal file
76
docs/reports/session-6.md
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
# Отчёт сессии 6 (для следующей сессии)
|
||||
|
||||
Дата: 2026-08-06 | Ветка: main | Этап 6 (курс + цумэ-го) — завершён
|
||||
|
||||
## Что сделано
|
||||
|
||||
1. **Контракты этапа 6 в INTERFACES.md до кода** (раздел «Форматы данных
|
||||
уроков и задач»): схема Markdown-урока (10 фиксированных разделов,
|
||||
`<go-task data-task-id>` raw-HTML в теле), TaskV1 (goal-предикаты вместо
|
||||
хардкода координат), ProgressV1 + touchStreak, страницы
|
||||
/learn, /learn/[id], /tsumego, /progress. План — docs/plans/plan-phase-6.md.
|
||||
2. **ADR-0003**: аудит контракта выявил, что parseSgf не умеет AB/AW и MA.
|
||||
В core добавлена ОДНА аддитивная функция `buildPosition` (валидация:
|
||||
вне доски/дубли/группа без дамэ → Error; корректный positionHashes);
|
||||
разметка connect — CR вместо MA. +6 тестов core.
|
||||
3. **Механика (подагент, ветка stage-6-core)**: goals.ts (4 предиката +
|
||||
формальный глаз v1: пустая область 1–3 пункта, окружённая одним цветом),
|
||||
storage.ts += ProgressV1 (тот же конверт), task-session.ts (чистая
|
||||
машина: illegal/wrong с откатом/playing/solved, авто-ответ по дереву,
|
||||
reset, hint), task-widget.ts (гидратация go-task, JSON-островок
|
||||
#go-task-data), 4 страницы, content.config.ts (zod из astro:schema),
|
||||
nav + строки в strings.ts.
|
||||
4. **Контент (подагент, ветка stage-6-content)**: 10 уроков (300–700 слов,
|
||||
разделы 1–6 и 10 с интерактивом), 33 цумэ-го + 7 задач уроков
|
||||
(capture 20 / connect 5 / two-eyes 5 / liberties 3; difficulty 1–5,
|
||||
≥3 на градацию), валидационный content.test.ts (217 проверок: позиции
|
||||
легальны buildPosition, вариации легальны applyMove, разметка цели),
|
||||
CREDITS.md (контент оригинальный, CC BY 4.0).
|
||||
5. **Интеграция (main loop)**: wiring-тесты переведены с placeholder на
|
||||
реальный контент; добавлен тест «главная линия каждой задачи достигает
|
||||
goal». Он поймал реальный дефект: goal проверялся только ПОСЛЕ
|
||||
авто-ответа соперника → транзиентные цели (liberties) недостижимы.
|
||||
Фикс task-session по контракту: проверка после КАЖДОГО хода игрока,
|
||||
до авто-ответа. Placeholder-контент удалён.
|
||||
6. **Гейты main: 413/413** (включая astro build в wiring-тесте),
|
||||
0 lint warnings. dist = 15 страниц, 280 КБ. Превью обновлено
|
||||
(version 89825fe).
|
||||
|
||||
## Принятые отклонения (подагенты задокументировали)
|
||||
|
||||
- env.d.ts в apps/web/src: tsc -b не видит сгенерированные типы astro:content
|
||||
(каталог .astro/ в .gitignore) — модуль объявлен через entry astro.
|
||||
- Для toPlay:'white' task-session инвертирует B/W в SGF перед parseSgf
|
||||
(парсер моделирует от пустой доски с чёрных). Контент v1 весь
|
||||
toPlay:'black' — инверсия не задействована.
|
||||
- lessons.done = решены все lsn-задачи урока; чисто теоретические уроки
|
||||
(7–9) пометки «пройден» не получают (в контракте нет UI для ручной
|
||||
отметки) — кандидат на этап 7.
|
||||
- Wiring-тест запускает реальный `npm run build` внутри vitest (timeout
|
||||
240 с) — гейты включают сборку.
|
||||
|
||||
## Известные ограничения контента v1 (в PROJECT_STATE)
|
||||
|
||||
- Мотив снэпбэк невыразим (parseSgf падает на occupied при повторной игре
|
||||
точки); тема «сеть» в цумэ-го отсутствует (есть в тексте урока 2);
|
||||
у two-eyes задач авто-ответ иногда тэнуки.
|
||||
|
||||
## Подводные камни для следующей сессии (этап 7)
|
||||
|
||||
- Среда прежняя: worktree в $HOME, коммитить всё, контракты inline в
|
||||
задании, prettier на docs, sh без brace expansion, no `worktree prune`.
|
||||
- Удаление чужих worktree после мержа: `git worktree remove --force` +
|
||||
при необходимости `rm -rf .git/worktrees/<name>`, затем `git branch -d`.
|
||||
- Этап 7 по спеке: .htaccess (gzip, кэш, MIME application/wasm),
|
||||
prefers-reduced-motion, клавиатурное управление доской, ARIA-live,
|
||||
страница урока ≤ 300 КБ по сети, теория без JS (уже держим), HTTPS
|
||||
ТОЛЬКО панелью хостинга (НЕ RewriteCond %{HTTPS} — вечный редирект за
|
||||
SSL-прокси). Плюс кандидаты: ручная отметка «урок пройден», suggestDeadGroups
|
||||
грубовата для уроков жизни и смерти (через ADR, зона core).
|
||||
- Ручная приёмка владельцем: критерии v1 №2 (партия vs ур.5) и №5
|
||||
(мобильный Safari) всё ещё открыты.
|
||||
|
||||
## С чего начать продолжение
|
||||
|
||||
Этап 7 (полировка) по мастер-промпту; docs/plans/plan-phase-7.md создать,
|
||||
контракты .htaccess/a11y — в INTERFACES.md до кода.
|
||||
Loading…
Add table
Add a link
Reference in a new issue