docs: уточнить остаточные P1/P2 после импорта

This commit is contained in:
2026-10-29 19:24:09 +03:00
parent 1b98b1828d
commit b57a5ffbce

View File

@@ -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.
- Нет восстановления группы из архива (сейчас архив односторонний).