Прежняя git-история утрачена при переносе проекта на машину владельца (снапшот без .git). Хэши коммитов в docs/reports/* относятся к утраченной истории. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
50 lines
3.2 KiB
Markdown
50 lines
3.2 KiB
Markdown
# План этапа 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).
|