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.