An ownerless plate with >=3 passages in the last 7 days fires one Telegram
alert to every user with a telegram_id, then goes silent for 7 days (or until
the vehicle gains an owner). The silence window is an atomic conditional
UPSERT on the new recurring_unknown_alerts table, so concurrent ingests can't
double-alert; verified the claim semantics and the full migration chain on a
throwaway postgres:16. Runtime queries only (no .sqlx entries). Falls back to
a text message when the passage has no photo (new TelegramService::send_message).