2653a32d6f
- BackupScheduler manages per-device backup goroutines independently from status poll - First backup uses 30-300s random jitter delay to spread load - Concurrency limited by buffered channel semaphore (configurable max) - Per-device Redis lock prevents duplicate backups across pods - Auth failures and host key mismatches block retries with clear warnings - Transient errors use 5m/15m/1h exponential backoff with cap - Offline devices skipped via Redis status key check - TOFU fingerprint stored on first successful SSH connection - Config output validated, normalized, hashed, published to NATS - SSHHostKeyUpdater interface added to interfaces.go - All 12 backup unit tests pass Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>