chore: восстановление репозитория из снапшота v0.3.1

Прежняя git-история утрачена при переносе проекта на машину владельца
(снапшот без .git). Хэши коммитов в docs/reports/* относятся к утраченной
истории.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
sab.code.lab 2026-08-07 09:34:02 +02:00
commit 1c85091186
184 changed files with 33303 additions and 0 deletions

View file

@ -0,0 +1,50 @@
# План этапа 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).