# 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`.