go-learn/docs/plans/plan-phase-8.md
sab.code.lab 1c85091186 chore: восстановление репозитория из снапшота v0.3.1
Прежняя git-история утрачена при переносе проекта на машину владельца
(снапшот без .git). Хэши коммитов в docs/reports/* относятся к утраченной
истории.

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

50 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# План этапа 8 — личный кабинет и синхронизация прогресса
Дата: 2026-08-06. Статус: завершён (461/461 + smoke.sh OK). Предшественник: этапы 17 завершены,
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).