- профиль приведён к docs/09: variant/level, updatedBy/name, лимит попыток - V14: NOT NULL и полная уникальность когорты, preflight legacy-групп - возврат группы из архива и история членства на странице группы - пагинация групп и плоского списка материалов - пакетные сдачи ведомости одним запросом - XLSX-preflight импорта и audit-тесты ростера - LDD: 66 claims, 398 тестов, release PASS
2.8 KiB
2.8 KiB
LDD baseline: 2026-10-29
Актуальный прогон после закрытия P1/P2-остатка: контракт профиля, финальные ограничения когорты, возврат группы из архива, пагинация, пакетные сдачи, row-level XLSX-импорт и audit-события ростера.
Результат
| Проверка | Результат |
|---|---|
| JUnit/интеграционные тесты | 398, 0 failures/errors/skipped |
| ktlint + detekt | зелёные |
| Claims | 66 (27 P0 / 39 P1), 66/66 proven, P0 gaps = 0 |
| Migration master→branch | PASS; identity V4–V14, повторные V13/V14 |
Mutation CourseAccessService |
75% test strength (порог 70%) |
Mutation PromotionPlanner |
69% test strength (порог 60%) |
| Browser E2E | 18/18 (Chromium/Firefox/WebKit) |
| Load smoke | 125 запросов, 0 ошибок, p95 0.942 с (порог < 1 с) |
Что добавлено в этой итерации
- профиль соответствует
docs/09:variant.id,level.id/code,grade.updatedBy,author.name;submissionLimit/submissionsTotalи SQL-тест «без N+1» на 10 лабораторных; V14__cohort_constraints.sql:NOT NULLдля пяти полей когорты, полный unique index и строгие check-ограничения; legacy-строки останавливают миграцию с явной ошибкой;- возврат группы из архива (
POST /api/v1/groups/{id}/restore) с аудитом; - пагинация
/admin/groupsи плоского списка материалов; latestPerStudentByLab— один запрос сдач на все лабораторные ведомости;- XLSX-тесты preflight-ошибок импорта (занятый логин, неактивная группа);
- аудит
GROUP_CREATE/STUDENT_CREATE/GROUP_ENROLL/GROUP_IMPORT/GROUP_ARCHIVE/GROUP_RESTORE; - история членства на странице группы (последние 200 событий).
Остаточные ограничения
- гонка импорта с параллельной вставкой логина всё ещё даёт общий 409;
- screenshot-diff/визуальной регрессии нет;
- mutation testing не 100%, нагрузочный smoke не является SLA;
- restore на staging, первый реальный Woodpecker pipeline, инвентаризация legacy-активов и daily backup timer требуют доступа к стенду/серверу.
Артефакты прогона: build/evidence/{runtime,migration,mutation,browser,smoke}.json,
отчёт gate — build/reports/evidence/index.md.