chore: восстановление репозитория из снапшота v0.3.1
Прежняя git-история утрачена при переносе проекта на машину владельца (снапшот без .git). Хэши коммитов в docs/reports/* относятся к утраченной истории. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
commit
1c85091186
184 changed files with 33303 additions and 0 deletions
50
docs/plans/plan-phase-8.md
Normal file
50
docs/plans/plan-phase-8.md
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
# План этапа 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).
|
||||
Loading…
Add table
Add a link
Reference in a new issue