diff --git a/docs/18-goal-audit.md b/docs/18-goal-audit.md index 8de67e2..8a64062 100644 --- a/docs/18-goal-audit.md +++ b/docs/18-goal-audit.md @@ -79,24 +79,35 @@ - Старые комментарии без автора показывают «автор не указан». - Студенческий профиль не показывает черновики лабораторных. +10. **Импорт: ошибки до записи.** + - Занятый логин и неактивная целевая группа возвращают `applied=false` + с номером строки и не создают частичных записей. + - Тесты: `GroupServiceIntegrationTest#import reports occupied login...`, + `#import reports inactive target group...`. + ## 3. Остаточные отличия от цели ### P1 -- **Импорт: ошибки БД.** Занятый логин и неактивная группа теперь дают - row-level `applied=false`; неожиданные DB-ошибки вне preflight всё ещё - откатывают транзакцию без построчного отчёта. -- **Догон повышения.** `ensureScheduledDryRun` до 31 августа возвращает `null` - и не создаёт план за предыдущий год; после долгого простоя в январе - пропущенный август не догоняется. - **Профиль: контракт.** Браузерные маршруты используют UUID курса, а docs/09 обещает `courseNo`; часть полей `variant/level/grade` отличается от контракта. Нужно либо привести код к контракту, либо официально обновить контракт. - **Backup restore на staging** не подтверждён артефактом/логом. - **Первый реальный CI pipeline** на Woodpecker VM не подтверждён. +### Осознанные границы + +- **Автоматический догон повышения за предыдущий календарный год не делаем.** + Планировщик не может безопасно восстановить историческое состояние групп: + текущие `course` уже могут быть изменены. Догон в том же году после 31 августа + работает; для прошлого года админ запускает dry-run с явным годом и проверяет + план вручную. Это защищает от повторного повышения по устаревшему состоянию. + ### P2 +- **Импорт: гонка и XLSX-отчёт.** Preflight закрывает известные конфликты, + но гонка с параллельной вставкой логина всё ещё даёт общий 409; XLSX-строки + новых preflight-тестов не покрыты (CSV покрыт). - Когорта: поля всё ещё nullable, уникальность частичная; нужен preflight и финальный `SET NOT NULL`/полный unique index после ручного разбора legacy. - Нет восстановления группы из архива (сейчас архив односторонний).