# Спринт 2 — Редактор тестов: AI-помощники (desktop web) **Формат:** отдельное веб desktop-приложение (этап 1, фича §4.2). **Граница спринта:** начинается **после** приёмки спринта 1; заканчивается готовностью **всех** функций AI-помощника из ТЗ (настройки ключа, проверка подключения, сценарии уровня теста и уровня вопроса) на базе **DeepSeek** и сохранения **идентичности дизайна** с остальным приложением. **Предпосылка:** версионирование (спринт 1) работает; сгенерированные/изменённые черновики сохраняются в модель **текущей редактируемой версии** согласно правилам 4.1. **Стек (целевой в ТЗ):** Python, FastAPI — **в репозитории TestingWebApp фактически Node.js + Express**, LLM через HTTP (OpenAI-совместимый API, в т.ч. DeepSeek); ключ в окружении или (в целевом виде спринта) в БД, не на клиенте. Сводка MVP: [../PROJECT_STATUS.md](../PROJECT_STATUS.md). --- ## Цель спринта Реализовать **§4.2 ТЗ**: интеграция DeepSeek, страница настроек, все табличные функции уровня теста и вопроса, обработка отсутствия ключа, UI с превью и подтверждением (без «тихой» перезаписи там, где ТЗ требует сравнения с чекбоксами). --- ## Функции (контрольный список из ТЗ) ### Интеграция и настройки - Ключ DeepSeek на `/settings`, хранение в БД, не отдаётся на фронт - «Проверить подключение» — тестовый запрос - Все AI-действия при отсутствии ключа — понятная ошибка + ссылка на настройки ### Уровень теста | Функция | Критерий | | --- | --- | | Сгенерировать тест | Только при заполненном названии; превью; применение целиком | | Проверить тест | Модалка с рекомендациями | | Предложить улучшение всего теста | Постатейно было → стало, чекбоксы, применение выбранного | ### Уровень вопроса | Функция | Критерий | | --- | --- | | Улучшить вопрос | Модалка, было/стало по частям, чекбоксы, **без** прямой замены без подтверждения | | Дистракторы | +3 неправдоподобных варианта **добавляются**, не заменяют | | Сгенерировать подсказку | Текст в поле подсказки; автор правит/удаляет (связь с §4.4 в следующих спринтах) | --- ## Технические подзадачи | # | Задача | | --- | --- | | 1 | Модель настроек (ключ), API save/test, маскирование в ответах | | 2 | Промпты и контракты JSON для каждой функции; валидация ответа LLM | | 3 | Эндпоинты/сервисы: 6 сценариев + единая обёртка ошибок/квот | | 4 | UI: кнопки в редакторе, модалки, превью «сгенерировать тест», дифы с чекбоксами | | 5 | Соблюдение правил 4.1 при сохранении применённых AI-изменений | | 6 | Логи без утечки ключа; rate-limit/таймауты по best effort | --- ## Вне спринта 2 - Медиа (§4.3), полноценное поведение подсказок в прохождении (§4.4 + §4.5) — отдельные спринты, если не входят в минимум для кнопки «подсказка» в редакторе - Дашборды (этап 2 ТЗ), HR-интеграция, MAX --- ## Документ тестирования Чек-лист: `sprint-02-testing.md`.