6d6fa10d91
Manual recovery после падения SnapshotProjectRoutingJob cron'а. В отличие от snapshot:backfill (ON CONFLICT DO NOTHING), snapshot:rebuild сначала DELETE'ит существующий snapshot за дату, затем INSERT'ит свежий из live state. Fail-loud strategy (Spec §4.2.6): 1. Heartbeat alarm via SchedulerHeartbeatTracker (Task 2.4 — already wired). 2. LeadRouter Log::error on missing snapshot (Task 2.5 — already wired). 3. Manual recovery: php artisan snapshot:rebuild --date=YYYY-MM-DD. NO fallback to live projects — explicit downtime + alert is safer than silent regression. NB: ->transaction() wrapper НЕ используется — конфликтует с SharesSupplierPdo shared-PDO в тестах. half-done state допустим: retry восстанавливает; на проде admin контроль и редкость вызова. Plan: docs/superpowers/plans/2026-05-26-slepok-routing-protection.md §Task 2.10 Tests added: - tests/Feature/Console/SnapshotRebuildCommandTest.php — 2 tests. Status: RED locally (Windows-native PG Project factory signal_type quirk — same as Task 2.2/2.3, memory project_slepok_protection.md). Command itself registered (php artisan list | grep snapshot). GREEN expected on CI Linux.