| REQ-BAK-001 |
The system shall create a full backup as a zip archive containing all data required to restore the entire installation. (realized by the deploy-side deploy/backup.sh — blobs-first-then-database ordering, pg_dump -Fc, Keycloak realm export incl. users, one self-contained zip with a manifest (app SHA, blob count/bytes/hash sample, dump/export checksums), optional off-box copy, prune to a bounded window default 35 days; ADR-0060 B-1a.) |
STR-010; ADR-0060 |
| REQ-BAK-002 |
The system shall create a per-scope backup as a self-contained zip archive (database content plus all referenced blobs of that scope). (per-scope export bundle deferred — ADR-0060 B-4, rides the inspection-copy/report wave; remains an honest gap.) |
STR-010; ADR-0002, ADR-0060 |
| REQ-BAK-003 |
Backups shall be restorable on the same or a different server, yielding a fully functional state; the search index may be excluded and rebuilt after restore. (realized by deploy/restore.sh + the weekly deploy/verify-backup.sh restore rehearsal — migrations current, app healthy, manifest-SHA match, blob re-hash clean, referential closure, search functional; the dated verification record is the "when did you last prove a restore?" evidence; ADR-0060 B-2a.) |
STR-010; ADR-0006, ADR-0060 |
| REQ-BAK-004 |
Backup creation shall verify blob integrity (re-hash and compare) and report any mismatch. (realized: the copy pass re-hashes every blob (also primary bit-rot detection) and verify-backup.sh re-hashes the restored store; ADR-0060.) |
STR-009; ADR-0001, ADR-0060 |
| REQ-BAK-005 |
Per-scope backups shall contain no data of other scopes. |
STR-003; ADR-0002 |
| REQ-BAK-006 |
The system shall offer an in-app, EXPORT_BACKUP-gated backup act: asynchronously executed (one at a time — a concurrent trigger is refused with a named reason), audited at both ends (BACKUP_TRIGGERED by the operator, BACKUP_RECORDED with the outcome — a failed run records its failure and is never silent), producing an archive byte-compatible with the deploy-side producer (REQ-BAK-001 — one restore drill covers both) into the mounted backups volume, downloadable with the attachment-hardening headers (REQ-DOC-027 pattern). Restore remains exclusively deploy-level. (ADR-0116 §1–§4; the host retains only the off-box sync credential.) |
STR-010; ADR-0116, ADR-0060, ADR-0018 |
| REQ-BAK-007 |
The system shall present backup EVIDENCE on the admin System surface: the last recorded backup (time, size, blob count, verification verdict), the history including failed runs, and an installation-level finding when no app-recorded verified backup exists within the ADR-0018 window (7 days), stated in the setup-finding grammar (warn, named, GLOBAL-anchored). (ADR-0116 §5–§6.) |
STR-010, STR-009; ADR-0116 |