a68331c86b
- PROJECT_STATUS: что сделано (черновики, версии, разбор, каталог) и планы - DEV_CONTOUR_USER_GUIDE: сценарии для проверяющих на dev-стенде - README, ТЗ, card1, журнал, бэклоги, шаги 01–11+README, спринты, TEST_TABLES: ссылки и примечания - backend/PROGRESS: ссылка на PROJECT_STATUS Made-with: Cursor
66 lines
4.5 KiB
Markdown
66 lines
4.5 KiB
Markdown
# Спринт 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`.
|