Прежняя git-история утрачена при переносе проекта на машину владельца (снапшот без .git). Хэши коммитов в docs/reports/* относятся к утраченной истории. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
57 lines
4.2 KiB
Markdown
57 lines
4.2 KiB
Markdown
# Отчёт сессии 8 (для следующей сессии)
|
||
|
||
Дата: 2026-08-06 | Ветка: main | Этап 8 (личный кабинет, синхронизация) — завершён
|
||
|
||
## Что сделано
|
||
|
||
1. **ADR-0004**: владелец выбрал email+пароль (отступление от «анонимного
|
||
токена» спеки); до-триаж раздела V литании выполнен и задокументирован
|
||
(IN: V.1, V.2, V.4, V.5, V.6-минимум, V.7-минимум, V.8; OUT: V.3,
|
||
внешняя наблюдаемость). Без верификации почты/восстановления пароля
|
||
(нет SMTP) — предупреждение в UI.
|
||
2. **Контракты этапа 8** в INTERFACES.md до кода: схема SQLite, 7
|
||
эндпоинтов, ProgressV2 (+updatedAt) с миграцией V1→V2, mergeDecision
|
||
(pull/push/noop/unauthorized/unavailable), тихая деградация.
|
||
3. **server/ (подагент stage-8-server)**: PHP 8 без фреймворка, PDO
|
||
SQLite (WAL, busy_timeout, foreign_keys, идемпотентная init-миграция),
|
||
prepared statements везде, 256 КБ лимит тела (413), rate limit 10/10мин
|
||
по IP (429), X-GoLearn-Client как CSRF-мера (403), security-заголовки,
|
||
config.example.php ([SECRET], config.php в .gitignore), health.php
|
||
(200 {"status":"ok"}; 503 при сбое БД без текста исключений).
|
||
smoke.sh: 30+ проверок — зелёный.
|
||
4. **apps/web (подагент stage-8-web)**: ProgressV2 + миграция + Clock-
|
||
инжекция, sync-client.ts (mergeDecision + fetch-обёртки + метка
|
||
серверного времени после push → следующая сверка noop), страница
|
||
/account (вход/регистрация/выход/ручной sync, role=status), навигация
|
||
«Кабинет». Интеграционная доработка main loop: тихий авто-sync на
|
||
/progress при активной сессии (до отрисовки цифр).
|
||
5. **docs/deploy.md** (V.2): 3 артефакта (dist → web root, server/ →
|
||
/api, config.php + БД вне web root), порядок, smoke, откат, бэкап/
|
||
restore SQLite, канонические пути — заполнить при первом деплое.
|
||
6. **Гейты main: 461/461**, 0 warnings, astro build PASS (16 страниц).
|
||
Smoke PHP прогнан main loop независимо — SMOKE OK.
|
||
|
||
## Среда: локальный PHP-рантайм
|
||
|
||
Системного PHP нет и apt недоступен. Решение: deb-пакеты Debian bookworm
|
||
(php8.2-cli/common/sqlite3) распаковываются dpkg-deb -x в /tmp/debs,
|
||
обёртка /tmp/php-run (pdo → pdo_sqlite → sqlite3, порядок важен).
|
||
ВНИМАНИЕ: /tmp между сессиями обнуляется — рантайм пересоздавать
|
||
(команды в отчёте кодера stage-8-server и в этом абзаце).
|
||
Статический бинарь с dl.static-php.dev не скачался (обрывы ~14 МБ).
|
||
|
||
## Известные ограничения (в PROJECT_STATE)
|
||
|
||
- Кабинет в статическом превью = «сервер синхронизации недоступен»
|
||
(by design; API оживает на хостинге).
|
||
- Риски хостинга: Secure-cookie за TLS-прокси без HTTPS=on; rate limit
|
||
общий за NAT; WAL на NFS медленный; Apache 2.2 игнорирует Require
|
||
(защита config.php — тогда БД строго вне web root).
|
||
|
||
## Что осталось
|
||
|
||
- Ручная приёмка владельцем: деплой на хостинг по docs/deploy.md +
|
||
критерии v1 №2/№3/№5.
|
||
- Этап 9 (KataGo ONNX) — «этап мечты», только после приёмки 1–7.
|
||
- Кандидаты через ADR: suggestDeadGroups грубовата; контент v1 (снэпбэк,
|
||
«сеть», тэнуки-ответы); метрика веса — только прямые ассеты.
|