Прежняя git-история утрачена при переносе проекта на машину владельца (снапшот без .git). Хэши коммитов в docs/reports/* относятся к утраченной истории. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4.2 KiB
4.2 KiB
Отчёт сессии 8 (для следующей сессии)
Дата: 2026-08-06 | Ветка: main | Этап 8 (личный кабинет, синхронизация) — завершён
Что сделано
- ADR-0004: владелец выбрал email+пароль (отступление от «анонимного токена» спеки); до-триаж раздела V литании выполнен и задокументирован (IN: V.1, V.2, V.4, V.5, V.6-минимум, V.7-минимум, V.8; OUT: V.3, внешняя наблюдаемость). Без верификации почты/восстановления пароля (нет SMTP) — предупреждение в UI.
- Контракты этапа 8 в INTERFACES.md до кода: схема SQLite, 7 эндпоинтов, ProgressV2 (+updatedAt) с миграцией V1→V2, mergeDecision (pull/push/noop/unauthorized/unavailable), тихая деградация.
- server/ (подагент stage-8-server): PHP 8 без фреймворка, PDO SQLite (WAL, busy_timeout, foreign_keys, идемпотентная init-миграция), prepared statements везде, 256 КБ лимит тела (413), rate limit 10/10мин по IP (429), X-GoLearn-Client как CSRF-мера (403), security-заголовки, config.example.php ([SECRET], config.php в .gitignore), health.php (200 {"status":"ok"}; 503 при сбое БД без текста исключений). smoke.sh: 30+ проверок — зелёный.
- apps/web (подагент stage-8-web): ProgressV2 + миграция + Clock- инжекция, sync-client.ts (mergeDecision + fetch-обёртки + метка серверного времени после push → следующая сверка noop), страница /account (вход/регистрация/выход/ручной sync, role=status), навигация «Кабинет». Интеграционная доработка main loop: тихий авто-sync на /progress при активной сессии (до отрисовки цифр).
- docs/deploy.md (V.2): 3 артефакта (dist → web root, server/ → /api, config.php + БД вне web root), порядок, smoke, откат, бэкап/ restore SQLite, канонические пути — заполнить при первом деплое.
- Гейты main: 461/461, 0 warnings, astro build PASS (16 страниц). Smoke PHP прогнан main loop независимо — SMOKE OK.
Среда: локальный PHP-рантайм
Системного PHP нет и apt недоступен. Решение: deb-пакеты Debian bookworm (php8.2-cli/common/sqlite3) распаковываются dpkg-deb -x в /tmp/debs, обёртка /tmp/php-run (pdo → pdo_sqlite → sqlite3, порядок важен). ВНИМАНИЕ: /tmp между сессиями обнуляется — рантайм пересоздавать (команды в отчёте кодера stage-8-server и в этом абзаце). Статический бинарь с dl.static-php.dev не скачался (обрывы ~14 МБ).
Известные ограничения (в PROJECT_STATE)
- Кабинет в статическом превью = «сервер синхронизации недоступен» (by design; API оживает на хостинге).
- Риски хостинга: Secure-cookie за TLS-прокси без HTTPS=on; rate limit общий за NAT; WAL на NFS медленный; Apache 2.2 игнорирует Require (защита config.php — тогда БД строго вне web root).
Что осталось
- Ручная приёмка владельцем: деплой на хостинг по docs/deploy.md + критерии v1 №2/№3/№5.
- Этап 9 (KataGo ONNX) — «этап мечты», только после приёмки 1–7.
- Кандидаты через ADR: suggestDeadGroups грубовата; контент v1 (снэпбэк, «сеть», тэнуки-ответы); метрика веса — только прямые ассеты.