# Отчёт сессии 8 (для следующей сессии) Дата: 2026-08-06 | Ветка: main | Этап 8 (личный кабинет, синхронизация) — завершён ## Что сделано 1. **ADR-0004**: владелец выбрал email+пароль (отступление от «анонимного токена» спеки); до-триаж раздела V литании выполнен и задокументирован (IN: V.1, V.2, V.4, V.5, V.6-минимум, V.7-минимум, V.8; OUT: V.3, внешняя наблюдаемость). Без верификации почты/восстановления пароля (нет SMTP) — предупреждение в UI. 2. **Контракты этапа 8** в INTERFACES.md до кода: схема SQLite, 7 эндпоинтов, ProgressV2 (+updatedAt) с миграцией V1→V2, mergeDecision (pull/push/noop/unauthorized/unavailable), тихая деградация. 3. **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+ проверок — зелёный. 4. **apps/web (подагент stage-8-web)**: ProgressV2 + миграция + Clock- инжекция, sync-client.ts (mergeDecision + fetch-обёртки + метка серверного времени после push → следующая сверка noop), страница /account (вход/регистрация/выход/ручной sync, role=status), навигация «Кабинет». Интеграционная доработка main loop: тихий авто-sync на /progress при активной сессии (до отрисовки цифр). 5. **docs/deploy.md** (V.2): 3 артефакта (dist → web root, server/ → /api, config.php + БД вне web root), порядок, smoke, откат, бэкап/ restore SQLite, канонические пути — заполнить при первом деплое. 6. **Гейты 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 (снэпбэк, «сеть», тэнуки-ответы); метрика веса — только прямые ассеты.