# План этапа 8 — личный кабинет и синхронизация прогресса Дата: 2026-08-06. Статус: завершён (461/461 + smoke.sh OK). Предшественник: этапы 1–7 завершены, main = a99aeb9 (431/431). Активация — команда владельца; модель учётки и до-триаж раздела V — ADR-0004. ## Ключевые решения (не пере-решать) 1. Модель — email+пароль (ADR-0004); БЕЗ верификации почты и восстановления пароля (нет SMTP на shared-хостинге; предупреждение в UI при регистрации). 2. PHP 8 без фреймворка, PDO SQLite (WAL, busy_timeout, БД вне web root), prepared statements везде, лимит тела 256 КБ, rate limit по IP, SameSite=Lax + заголовок X-GoLearn-Client как CSRF-мера. Синтаксис PHP ≥ 8.0 — совместимость с хостингами. 3. Прогресс на сервере — opaque ProgressV2 (ProgressV1 + updatedAt), last-write-wins по updatedAt; localStorage — SoT для гостей; миграция V1→V2 в storage.ts по контракту конверта. 4. Превью статическое: кабинет деградирует тихо при недоступном API (status 'unavailable', пометка в UI, без алертов). 5. Локальная проверка бэкенда: PHP 8.2 CLI (распакованные deb-пакеты в /tmp/debs, обёртка /tmp/php-run) + php -S + curl smoke.sh. В среде нет системного PHP — гейты npm PHP не запускают. 6. Параллельные ветки: stage-8-server (server/) и stage-8-web (apps/web); общих файлов нет. Мерж: server → web. ## Объём - server/: api/{register,login,logout,me,progress,health}.php, lib/{db,http,auth,ratelimit}.php, config.example.php, .htaccess (заголовки, запрет листинга), tests/smoke.sh. - apps/web: storage.ts (ProgressV2 + миграция), sync-client.ts (mergeDecision чистая + fetch), pages/account.astro, nav + strings. - docs/deploy.md — деплой-чеклист V.2 (артефакты, порядок, smoke, откат, пути на хостинге, бэкап/restore SQLite). - PROJECT_STATE: этап 8 разморожен → в работе → завершён. ## Приёмка этапа - npm run gates зелёные (0 warnings), astro build PASS. - server/tests/smoke.sh зелёный локально (PHP 8.2): полный прогон register/login/put/get/401/403/429/health. - Ручная приёмка владельцем на хостинге — по docs/deploy.md. ## Риски - PHP на хостинге владельца может отличаться (версия, pdo_sqlite) — чек-лист deploy.md начинается с проверки `php -v` и модулей. - Сессии PHP на shared-хостинге: gc и путь сессий — зафиксировать session_save_path в config при проблемах (заметка в deploy.md).