19644a1d36
ProjectService::update() теперь возвращает Project с dynamic applies_from attribute (CarbonImmutable | null), который ProjectResource подхватит для UI («изменения вступят в силу с DD.MM 21:00»). Логика: для каждого изменённого поля из SupplierSnapshotGuard::SLEPOK_SENSITIVE_FIELDS вычисляется максимум appliesFrom() — slepok-инвариант (до 18:00 МСК = today 21:00, после = tomorrow 21:00). NULL = применяется немедленно (none changed / no supplier links). Plan: docs/superpowers/plans/2026-05-26-slepok-routing-protection.md §Task 2.8 Spec: docs/superpowers/specs/2026-05-26-slepok-routing-protection-design.md §4.2.5 Tests: tests/Feature/Services/Project/ProjectServiceAppliesFromTest.php — 4/4 PASS. ProjectService regression — 7/7 PASS.