Напоминания:
- ProbationEndingReminderDto: ManagerEmail убран — это был унаследованный
ReceiverEmail под вторым именем.
- Ссылка для ProbationEnding больше не ведёт на саму заявку на приём (она уже
закрыта, решать по ней нечего) — берётся из новой настройки
RemindersOptions.ProbationReminderUrl и ведёт в раздел, где заводят новую
заявку. Подстановок в ней нет: адрес конкретной формы в портал не передать,
rptype без rpid/rpsource игнорируется (см. parseRoute в request-portal).
Заодно ушли BuildProbationUrl и ненужные больше параметры type/listId.
Стайлгайд (CLAUDE.md) — у enum первое значение None:
- ReminderFeed: None=0 трактуется как ApprovalOverdue, чтобы вызов без явного
выбора работал как раньше.
- EmploymentStatus: заодно инвертирован switch в ReminderService — раньше
«продолжить» было веткой по умолчанию, и новый None молча означал бы
«сотрудник работает». Теперь по умолчанию пропуск с предупреждением.
- ConditionsLogic: None — НЕвалидное значение, отвергается валидаторами шага
(в том числе новым PatchTemplateRouteStepRequestValidator, его не было вовсе).
Поэтому у ConditionsLogic в Create/Update-запросах убрано значение по
умолчанию: System.Text.Json в .NET 10 уважает дефолты параметров
конструктора, и пропущенное поле молча означало «И». Теперь пропущенное поле
даёт None и упирается в валидатор.
ЛОМАЮЩЕЕ ИЗМЕНЕНИЕ КОНТРАКТА: клиент, не присылающий conditionsLogic в
POST/PUT шага, получит 400 вместо прежнего молчаливого «И». Админка не
затронута — она это поле всегда отправляет.