go-learn/docs/PROJECT_STATE.md
sab.code.lab 6f705fff56
Some checks are pending
CI / npm run gates (ubuntu-latest) (push) Waiting to run
CI / npm run gates (windows-latest) (push) Waiting to run
fix(content): правки по аудиту го-терминологии, отчёт в docs/audit
Аудит 36 терминов по железному правилу этапа 11 (3 research-агента +
приёмка оркестратором, 7 URL перепроверено): docs/audit/terminologija.md.

Исправлены подтверждённые расхождения:
- урок 01: опечатка-гибрид алфавитов «атari» -> «атари»;
- урок 09: диаграмма бамбука (такэфу) — было 4 камня в одну линию,
  верно — две пары на параллельных линиях (ru.wikipedia, jeudego.org);
- урок 06 + «Источники»: «иккэн» -> «иккэн-тоби» (Википедия, BGA);
- «Источники»: убрано приравнивание накадэ к vital point (SL ?Nakade).

На решении владельца (не найдено в источниках, зафиксировано в отчёте
и PROJECT_STATE): «кошачья пасть», «жизненная точка», этимология ко
(«вечность»), «ситё-прерыватель».

Гейты: 467/467.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-07 11:05:45 +02:00

11 KiB
Raw Blame History

PROJECT_STATE — состояние проекта «Сайт обучения Го»

Обновлено: 2026-08-07 | Версия: 0.3.1 | Сессия: 11 (этап 11)

Этапы (по мастер-промпту)

Этап Статус Комментарий
Шаг 0. Методология и каркас завершено Триаж — ADR-0001; каркас подтверждён владельцем молчанием (дефолт принят)
1. Движок правил (packages/core) завершено 43/43 теста, gates зелёные; контракт — docs/INTERFACES.md; выбор алгоритма групп — ADR-0002 (flood fill)
2. Доска (Canvas) завершено 11 слоёв render, reduceInput, TerritoryMap; тёмная тёплая тема
3. ИИ ур. 13 (эвристика) завершено chooseMove, LEVEL_ATARI_PROBABILITY, детерминизм по seed
4. ИИ ур. 46 (MCTS, Web Worker) завершено UCT c=1.4, бюджеты 300/800/1500 мс, воркер-протокол stateless
5. Игровой интерфейс завершено /play: партии vs ИИ, подсказки, SGF; hotfix play.html
6. Курс + цумэ-го завершено 10 уроков, 33 цумэ-го + 7 задач уроков, прогресс/серия дней; 413/413 тестов
7. Полировка завершено .htaccess, клавиатура/ARIA, reduced-motion, отметка урока, вес ≤300 КБ; 431/431
8. (опц.) PHP+SQLite бэкенд завершено Личный кабинет email+пароль (ADR-0004), sync прогресса; smoke.sh зелёный; деплой — docs/deploy.md
9. (опц.) KataGo ONNX заморожен Не начинать, пока этапы 17 не приняты
8.1. Кабинет 2.0 завершено Регистрация отдельной страницей + SVG-капча, восстановление пароля токеном; smoke 58 проверок
10. Дизайн-перенос «васи» завершено Светлая тема от Kimi WebSites натянута на каркас; тёмная тема удалена; 467/467; превью — новая версия
11. Аудит контента + «Источники» завершено 85 утверждений: 70 подтв./10 расх./5 не найдено (docs/audit/); /istochniki.html; 10 правок уроков; 467/467

Известные проблемы

  • Репозиторий пересоздан с нуля 2026-08-07 на машине владельца (снапшот v0.3.1 без .git): прежняя git-история утрачена, хэши коммитов в docs/reports/* относятся к утраченной истории. Remote — https://git.sab-core.ru/ShiZa/go-learn.git.

  • Кабинет в статическом превью показывает «сервер синхронизации недоступен» — by design (API оживает только на хостинге с PHP).

  • Восстановление пароля — через mail() (этап 8.1); доставляемость на shared-хостинге хрупкая (SPF/DKIM): владельцу проверить тестовое письмо при деплое (шаг в docs/deploy.md). Тема письма — сырой UTF-8 без RFC 2047: на части MTA может отображаться некорректно.

  • PHP-часть вне npm-гейтов: smoke.sh локально (PHP из deb в /tmp) и на хостинге; CI для PHP не настроен.

  • Риски хостинга от бэкенд-кодера: Secure-cookie за TLS-прокси без HTTPS=on; rate limit по REMOTE_ADDR общий за NAT; WAL на NFS-ФС может быть медленным (busy_timeout=5000 смягчает).

  • Критерии приёмки v1: №1 (тесты) и №4 (чистый клон/сборка) — зелёные автоматически; №2 (партия vs ур.5), №3 (тайминги ур.3 <50мс, ур.6 <2с), №5 (мобильный Safari) — ручные, ожидают владельца.

  • Этап 6, ограничения контента v1: все задачи toPlay='black' (parseSgf моделирует от пустой доски с чёрных; виджет умеет инверсию B/W, но контент не использует); мотив снэпбэк невыразим (parseSgf падает на occupied при повторной игре точки); тема «сеть (гэта)» в цумэ-го отсутствует (покрыта текстом урока 2); у two-eyes задач авто-ответ иногда тэнуки (пассивный соперник).

  • task-session: goal проверяется после КАЖДОГО хода игрока, до авто-ответа (фикс интеграции этапа 6; иначе транзиентные цели liberties недостижимы).

  • Ссылки ведут на /play.html, сборка с build.format 'file' (hotfix после этапа 5): статические превью-серверы без directory index давали 404 на /play. На Apache с DirectoryIndex работали бы оба варианта, формат 'file' универсальнее.

  • CI (.github/workflows/ci.yml) написан, но не проверен запуском — репозиторий пока локальный. Первая проверка — после публикации на GitHub.

  • packages/board без project reference на core (TS6310 при tsc -b --noEmit, TS 5.9.3): импорт резолвится через workspace-симлинк. Пересмотреть при обновлении TypeScript или смене скрипта typecheck.

  • Реальный Worker не принимает cancel во время синхронного счёта (event loop); семантика протокола реализована, но в этапе 5 UI решает: чанкование счёта через setTimeout в воркере или terminate+пересоздание воркера (комментарий в packages/ai/src/worker.ts).

  • Плейаут MCTS ограничен ~147 сим/300 мс на 9×9: applyMove копирует positionHashes каждый ход (O(n²) в плейауте). Ускорение — только через core, отдельной задачей, если силы ур. 46 не хватит на приёмке.

  • Astro 5.18.2 вместо 7.x: astro 6/7 требуют Node ≥22.12 (hardcoded), у нас Node 20.20.2. Пересмотреть при обновлении Node на машине разработки.

  • suggestDeadGroups (core) на разрежённых позициях предлагает «мёртвыми» живые группы — грубость заявлена в контракте, ручная корректировка в UI есть; кандидат на уточнение эвристики.

  • Критерии v1 №2 (партия vs ур.5) и №5 (мобильный Safari) — ручная приёмка владельцем после этапа 7.

  • Суперко юнит-тест моделирует цикл >2 ходов через сконструированную историю хэшей (настоящее двойное ко громоздко в фикстуре); механизм дополнительно покрыт property-тестом. Отложено: построить настоящую позицию двойного ко на 9×9 — низкий приоритет.

  • Resign-узлы сериализуются в SGF как пас (в SGF нет хода «сдаюсь») — задокументировано в packages/core/src/sgf.ts, осознанное ограничение.

  • suggestDeadGroups — грубая эвристика, возможны ложные срабатывания на открытом пространстве; ручная корректировка — за UI (этап 5).

  • Коми движка 6,5 (19×19) расходится со стандартом китайских правил 7,5 (аудит этапа 11, SL ChineseRules/Komi). Урок 05 честно разводит «наши партии» и «стандарт». Владельцу предложено решение (2026-08-07) — ответ «без предпочтений»: оставляем 6,5 как есть; вопрос закрыт до нового решения.

  • Аудит терминологии 2026-08-07 (docs/audit/terminologija.md): 36 терминов, 4 расхождения исправлены (атari, диаграмма бамбука, иккэн→иккэн-тоби, накадэ≠vital point). На решении владельца: «кошачья пасть», «жизненная точка», этимология ко («вечность»), «ситё-прерыватель» (авторская калька).

Критические долги

  • Нет.

Планы (от владельца)

  • Этап 12 (черновик, 2026-08-07): добавить в подвал сайта подпись «сайт сделан sab:core» (формулировка подтверждена владельцем) с логотипом; подпись кликабельна — URL владелец даст позже. Логотип был в соседнем диалоге (сайт с самолётиками) — оркестратору недоступен; владелец загрузит файл в чат. При старте: получить лого (лучше PNG/SVG с прозрачным фоном) и URL; размещение — в футере рядом с privacy-note, спокойный стиль без кричащих элементов.