You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
12 KiB
12 KiB
Спринты по bugfix-задачам (Тесты / Доступ / Генерация)
Дата: 2026-04-30
Контур: flask_app (UI + API + сервисы генерации)
Цели пакета
- Дать доступ всем авторизованным пользователям ко всем активным тестам (без назначений).
- Привести поведение шаблона генерации теста к ожидаемому (кол-во вопросов/вариантов/правильных ответов).
- Добавить массовые настройки «несколько вариантов ответа».
- Улучшить поток работы с подсказками и прозрачность прогресса генерации.
Спринт 1 — Доступ всем авторизованным (без назначений)
Объём
- Убрать зависимость прохождения теста от назначений (
TestAssignment*). - Разрешить доступ к активным тестам для любого авторизованного пользователя.
- Проверить, что каталог и старт попытки работают консистентно с новой политикой.
Задачи
-
Политика доступа
- В
user_has_test_accessвернутьok=Trueдля любого активного теста, если тест существует и пользователь авторизован. - Оставить проверки авторства только там, где они нужны для редактора/версий/админских действий.
- В
-
Проверка API прохождения
start_attempt,play,submit,reviewне должны требовать назначения на пользователя.- Ошибка «Доступ запрещён» не возникает для обычного авторизованного сотрудника при прохождении активного теста.
Критерии приёмки
- Любой авторизованный пользователь может открыть и пройти любой активный тест, даже без назначения.
- При этом операции автора (редактор, версии, массовые действия) остаются ограничены автором.
Оценка
- 0.5 дня.
Спринт 2 — Шаблон генерации: контракт и предсказуемость
Проблема
Сейчас пользователь создаёт шаблон (например, 12×4), затем генерирует из документа и получает иной результат (например, 10×3). Ожидания и фактический контракт не совпадают.
Объём
- Зафиксировать единый контракт: какие параметры шаблона обязательны для генератора.
- Принудительно соблюдать:
- количество вопросов,
- количество вариантов в вопросе,
- границы количества правильных ответов.
- Добавить валидацию и пост-проверку результата генерации.
Задачи
-
Формальный контракт шаблона
- Явно определить обязательные поля shape:
questions_countoptions_per_questionmultiple_answers_defaultcorrect_answers_min/max
- Хранить shape вместе с тестом/версией как источник истины.
- Явно определить обязательные поля shape:
-
Генерация по документу с shape
- Передавать shape в генератор при
generate from document. - После генерации валидировать фактическую структуру.
- При расхождении:
- либо автоматически нормализовать (добить/сжать до нужного формата),
- либо показать понятную ошибку и не сохранять черновик.
- Передавать shape в генератор при
-
Пользовательская обратная связь
- На экране до запуска показывать «Будет сгенерировано: 12 вопросов, 4 варианта».
- После завершения показывать фактический итог и предупреждение, если пришлось авто-нормализовать.
Критерии приёмки
- Для шаблона 12×4 итоговый тест всегда 12 вопросов по 4 варианта.
- Несоответствие не проходит «тихо»: либо авто-исправление с уведомлением, либо явная ошибка.
Оценка
- 1.5–2.5 дня.
Спринт 3 — Массовый контроль «Несколько вариантов ответа»
Объём
- Добавить глобальный чекбокс «Несколько вариантов ответа» (для всех вопросов).
- В шаблоне добавить диапазон правильных ответов:
от _ до _. - При отключении мультивыбора на конкретном вопросе нижняя граница «от» фиксируется в
1.
Задачи
-
UI шаблона
- Глобальный switch/checkbox: «Несколько вариантов ответа для всех вопросов».
- Поля диапазона:
Мин. правильных(от),Макс. правильных(до),- валидация
1 <= min <= max <= options_per_question.
-
Применение к вопросам
- При включении глобального флага обновлять все вопросы:
hasMultipleAnswers=true.
- При выключении:
hasMultipleAnswers=false,minCorrect=1,maxCorrect=1.
- На уровне отдельного вопроса разрешить override.
- При включении глобального флага обновлять все вопросы:
-
Правило «заморозки min=1»
- Если на вопросе
hasMultipleAnswers=false, то:minCorrectавтоматически =1,- поле
minCorrectread-only/disabled.
- Если на вопросе
-
Серверная валидация
- API сохраняет/проверяет тот же инвариант.
- Невалидные комбинации отклоняются с понятным сообщением.
Критерии приёмки
- Глобальный флаг влияет на все вопросы.
- Локальное отключение мультивыбора фиксирует
min=1. - Генератор и редактор работают в одинаковой логике, без рассинхрона.
Оценка
- 1.5–2 дня.
Спринт 4 — Подсказки и прогресс генерации
Объём
- В параметрах теста при включённых подсказках показать действие «Сгенерировать подсказки».
- Генерация подсказок работает только по заполненным вопросам.
- Если тест генерируется с нуля и подсказки уже включены — подсказки генерируются в том же пайплайне.
- Добавить прогресс по этапам генерации + локальные индикаторы загрузки в соответствующих блоках UI.
Задачи
-
Кнопка/ссылка «Сгенерировать подсказки»
- Показ только при
hintsEnabled=true. - Показ количества:
N без подсказок. - Запуск только по вопросам, где есть текст + варианты.
- Показ только при
-
Пайплайн генерации «с нуля»
- Если
hintsEnabled=true, после генерации вопросов автоматически запускать генерацию подсказок. - Ошибки подсказок не должны ломать весь тест: частичный результат допустим с отчётом.
- Если
-
Прогресс и статусы
- Этапы:
- подготовка документа,
- извлечение текста,
- генерация структуры,
- генерация вопросов,
- генерация подсказок,
- финализация.
- В UI показывать текущий этап и процент/счётчик.
- Спиннеры показывать только у активного блока (не глобально на всю форму).
- Этапы:
-
Наблюдаемость
- Логи этапов и длительности.
- В ответ API возвращать breakdown по шагам/ошибкам.
Критерии приёмки
- Пользователь видит, что именно сейчас генерируется.
- Подсказки отдельно запускаются и генерируются только для валидных вопросов.
- При генерации «с нуля» с включёнными подсказками подсказки появляются автоматически.
Оценка
- 2–3 дня.
Спринт 5 — Регрессия, UX-полировка, выпуск
Объём
- Сквозное тестирование сценариев.
- Документация для пользователей и команды.
- Подготовка релиз-нота.
Тест-кейсы (минимум)
- Неавторизованный пользователь открывает приватные URL → редирект на логин.
- Каталог тестов: есть переход «На главную».
- Шаблон 12×4 + генерация из PDF → на выходе 12×4.
- Глобальный мультивыбор + локальное выключение на 1 вопросе →
min=1на этом вопросе. - Включены подсказки:
- кнопка «Сгенерировать подсказки» доступна,
- генерируются только по заполненным вопросам.
- Генерация с нуля + подсказки включены → подсказки сгенерированы в том же запуске.
- Прогресс этапов отображается корректно, загрузка локальная.
Оценка
- 1–1.5 дня.
Приоритеты
- P0: Спринт 1 (доступ всем авторизованным), критичный функциональный bugfix.
- P1: Спринт 2 (контракт шаблона), устранение основного функционального несоответствия.
- P1: Спринт 3 (массовый мультивыбор), важная продуктовая логика.
- P2: Спринт 4 (подсказки + прогресс), прозрачность и удобство.
- P2: Спринт 5 (регрессия + выпуск).
Суммарная оценка
Ориентир: 6.5–10 рабочих дней (в зависимости от объёма автотестов и глубины рефакторинга генератора).