go-learn/docs/reports/session-8-1.md
sab.code.lab 1c85091186 chore: восстановление репозитория из снапшота v0.3.1
Прежняя git-история утрачена при переносе проекта на машину владельца
(снапшот без .git). Хэши коммитов в docs/reports/* относятся к утраченной
истории.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-07 09:34:02 +02:00

56 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Отчёт сессии 9, этап 8.1 (для следующей сессии)
Дата: 2026-08-06 | Ветка: main | Этап 8.1 (кабинет 2.0) — завершён
## Что сделано
1. **Контракты 8.1** в INTERFACES.md + plan-phase-8-1.md; дизайн OAuth
VK ID / Яндекс ID — docs/design/oauth-vk-yandex.md (что нужно от
владельца: приложения в консолях id.vk.com/business/go и
oauth.yandex.ru, ключи в config.php, HTTPS redirect URI; реализация —
этап 8.2, ~1 сессия, когда будут ключи).
2. **server (подагент)**: api/captcha.php (SVG-капча БЕЗ GD: 5 символов,
повороты/шумовые кривые, sha256+expires 10 мин в сессии, одноразовая);
register += captcha (порядок: 429→403→422 captcha→422→409→201);
api/password-reset/request.php (всегда 200, anti-enumeration; токен
bin2hex(32), sha256 в БД, 1 час; mail() со ссылкой; сбой → 503;
5/10мин) и confirm.php (200/400/422; 10/10мин); миграция
password_resets; config.example.php += base_url/mail_from; тестовый
режим GOLEARN_TEST=1 (X-Captcha-Debug, письмо в GOLEARN_TEST_MAIL).
3. **web (подагент)**: /account.html — только вход + ссылки «Нет
аккаунта? Зарегистрируйтесь» и «Забыли пароль?»; новые страницы
/register.html (email, пароль ×2, капча с кнопкой обновления,
авто-login → /account) и /password-reset.html (два режима по
?token=); sync-client += requestPasswordReset/confirmPasswordReset,
register(email, password, captcha); все статусы role=status.
4. **Гейты main: 467/467** (+6), 0 warnings, astro build PASS
(18 страниц). **smoke.sh: 58 проверок**, прогнан main loop
независимо — SMOKE OK (капча, полный цикл reset: письмо→токен→новый
пароль→login старым 401/новым 200, 429-е).
5. docs/deploy.md += base_url/mail_from и шаг проверки почты (4.1).
## Отклонения исполнителей (приняты)
- confirm.php: 422 (пароль <8) проверяется до 400 token_invalid
контракт порядок не фиксировал, оба кода по контракту.
- rate_check в register до проверки заголовка (403-пробы не тратят
лимит); запись попытки после заголовка.
- Тема письма сырой UTF-8 без RFC 2047 (риск отображения темы на
части MTA; ссылка не страдает) в PROJECT_STATE.
## Среда
- /tmp обнуляется между сессиями: PHP-рантайм (debs в /tmp/debs +
/tmp/php-run) пересоздавать; рецепт в session-8.md. Статический
бинарь с dl.static-php.dev не докачивается (обрывы); deb-способ рабочий.
- Финальные сообщения подагентов второй раз приходят пустыми/теряются,
но «коммить всё» спасает: проверять ветки гитом перед повторной
делегацией.
## Что осталось
- Этап 8.2 (VK ID / Яндекс ID) когда владелец получит ключи;
дизайн готов.
- Ручная приёмка: деплой по docs/deploy.md (включая проверку почты),
критерии v1 2/№3/№5.
- Этап 9 (KataGo ONNX) после приёмки 17.