Draft: Адаптивная выдача после финальной оценки и история решений
Automatic/recommend теперь выдают следующую карточку только после финальной оценки преподавателя. Два успешных результата предлагают повышение, последний неуспех/критичная ошибка/нарушение времени — понижение. Fixed сохраняет немедленную выдачу из выбранного преподавателем банка; control принимает только fixed.
Серверный этап Beads soslct-a2e.8:
- чистая политика adaptive-proposal-0.7, серверный cutoff, точные исходные ревизии;
- старт automatic/recommend с минимального уровня утверждённого frozen bank, отдельные циклы repeat_shuffled по уровням;
- миграция 007: неизменяемые AdaptiveDecision и счётчики; существующие fixed-занятия продолжаются без выдуманной истории;
- GET /lessons/{id}/adaptive-decisions: владелец-преподаватель видит своё занятие, ученик — только свои решения, фильтрация до пагинации;
- оценка, новая попытка, решение и счётчики сохраняются атомарно; повтор, пересмотр старой оценки и гонка со stop не создают лишней активной карточки.
Ограничение: submit в automatic/recommend при незавершённом таймере применимого критерия возвращает 409 adaptive_timing_unresolved и оставляет попытку для продолжения. Завершённые просроченные таймеры принимаются. Полный путь экспертного разрешения недоказанного времени/technical_issue — отдельная задача soslct-a2e.8.1. UI выбора режима и объяснений ещё не подключён; полный R1 и ML-прогноз этим этапом не закрываются.
Локальные проверки CPython 3.14.4 / PostgreSQL 17.11:
- backend/ci.py — 47/47 без пропусков;
- backend/ci.py --docker — 113/113, включая 17 новых PG/API-тестов, без пропусков;
- tools/ci_documentation.py test — 228/228; validate — успешно;
- backend/build.py — пакет с новыми модулями, миграцией и тестами собран;
- PDF пересобран, изменённые страницы проверены визуально; статусы приёмки сохранены, обновлены только производные fingerprints/checksums;
- повторное независимое ревью текущего серверного этапа — без обязательных замечаний.
Документация: backend/ADAPTATION.md и разделы 23/25. Новых зависимостей нет. MR остаётся Draft и направлен в codex/full-r1-20260922. Новый GitLab pipeline этими локальными результатами не подтверждается.