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
43
docs/decisions/ADR-0004-account-email-password.md
Normal file
43
docs/decisions/ADR-0004-account-email-password.md
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
# ADR-0004: личный кабинет email+пароль (этап 8) и до-триаж раздела V
|
||||
|
||||
Дата: 2026-08-06. Статус: принято (решение владельца).
|
||||
|
||||
## Контекст
|
||||
|
||||
Владелец заказал «маленький личный кабинет» с хранением прогресса —
|
||||
активация этапа 8 (ОПЦИОНАЛЬНЫЙ по спеке: «только по отдельной команде»).
|
||||
Спека этапа 8 предписывала анонимный токен; владелец выбрал
|
||||
**email + пароль** (ask_user 2026-08-06) — осознанное отступление от
|
||||
«без сбора данных»: email — персональные данные, храним минимум
|
||||
(email + хэш пароля), никакой аналитики/трекинга не добавляется.
|
||||
|
||||
## Решение
|
||||
|
||||
1. Регистрация email+пароль, password_hash/password_verify, сессии
|
||||
PHP native (HttpOnly, SameSite=Lax). Контракт API — INTERFACES.md.
|
||||
2. **Без верификации почты и восстановления пароля**: на shared-хостинге
|
||||
нет гарантии SMTP; потерянный пароль = новая учётка. Это предупреждение
|
||||
показывается в UI при регистрации (зафиксировано в контракте).
|
||||
3. Прогресс — opaque-блоб ProgressV2 на сервере, last-write-wins по
|
||||
updatedAt; localStorage остаётся SoT для неавторизованных.
|
||||
|
||||
## До-триаж раздела V литании (требование мастер-промпта для этапа 8)
|
||||
|
||||
| Пункт | Вердикт | Комментарий |
|
||||
| --------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| V.1 (агент не трогает прод) | IN | Прод-деплой — только команды владельцу блоком; агент не выполняет |
|
||||
| V.2 (деплой-чеклист) | IN | docs/deploy.md: ВСЕ артефакты (dist → web root, server/ → /api, config.php, БД вне web root), smoke = health.php, откат = перезаливка предыдущего dist |
|
||||
| V.3 (один скрипт деплоя) | OUT | Нет SSH/контейнеров, деплой по FTP; чек-лист V.2 покрывает |
|
||||
| V.4 (секрет-гигиена) | IN | config.php с путём БД — вне репо (.gitignore), в репо config.example.php с плейсхолдерами [SECRET]; секретов в коде нет |
|
||||
| V.5 (канонические пути) | IN | Пути на хостинге фиксируются в docs/deploy.md письменно при первом деплое (владельцем) |
|
||||
| V.6 (наблюдаемость) | IN (минимум) | health.php {"status":"ok"}; внешний наблюдатель/алерты — OUT (нет сервера в нашем управлении) |
|
||||
| V.7 (бэкап) | IN (минимум) | Бэкап = копия SQLite-файла средствами панели хостинга; процедура restore в deploy.md; автоматика — OUT |
|
||||
| V.8 (приёмка/ворота) | IN | Приёмка этапа 8 = smoke.sh зелёный локально + ручной прогон на хостинге владельцем |
|
||||
|
||||
## Последствия
|
||||
|
||||
- В превью (статический хостинг) API недоступен — UI кабинета обязан
|
||||
деградировать тихо («синхронизация недоступна»), без алертов.
|
||||
- CI-гейты не запускают PHP (в среде его нет у GitHub runner по
|
||||
умолчанию — есть: shivammathur/setup-php при желании; в v1 smoke.sh
|
||||
локальный/на хостинге, зафиксировано в PROJECT_STATE).
|
||||
Loading…
Add table
Add a link
Reference in a new issue