45 lines
2.8 KiB
Markdown
45 lines
2.8 KiB
Markdown
# 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.918 с (порог < 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`.
|