# Requirements Checklist (032) - [ ] Tenant-scoped tables use `tenant_id` consistently. - [ ] 1 Run = 1 BackupSet (no rolling reuse in MVP). - [ ] Dispatcher is idempotent (unique schedule_id + scheduled_for). - [ ] Concurrency lock prevents parallel runs per schedule. - [ ] Run stores status + summary + error_code/error_message. - [ ] UI shows schedule list + run history + link to backup set. - [ ] Run now + Retry are permission-gated and write DB notifications. - [ ] Audit logs are written for dispatcher, runs, and retention (tenant-scoped; no secrets). - [ ] Retry/backoff policy implemented (no retry for 401/403). - [ ] Retention keeps last N and soft-deletes older backup sets. - [ ] Tests cover due-calculation, idempotency, job success/failure, retention.