Record successful full offsite Forgejo recovery and remaining custody gate
Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a06ecb-456a-71c2-b41e-0755d336e883
This commit is contained in:
parent
603c2926fa
commit
5567fa979e
11 changed files with 187 additions and 10 deletions
|
|
@ -10,7 +10,7 @@ Backup, 10 GiB quota. Provider selection does not establish asset coverage.
|
|||
| platform-pg | Scaleway Barman base backups + WAL, `platform-pg/` | Earlier package restore evidence; independent logical Nextcloud copy |
|
||||
| platform-pg-2 | Scaleway Barman base backups + WAL, `platform-pg/platform-pg-2/` | Earlier package restore evidence; independent logical Nextcloud copy |
|
||||
| forgejo-db | Scaleway Barman base backups + WAL, `platform-pg/forgejo-db/`; daily 02:35 UTC, 30-day retention | Fresh isolated physical restore passed in 45.08 seconds; full archive coverage remains separate |
|
||||
| Forgejo repositories/packages/blobs | No reviewed Scaleway archive destination found | Corrected full-archive capture; 5.35 GB verified encrypted artifact staged; secondary download/application restore still pending |
|
||||
| Forgejo repositories/packages/blobs | No reviewed Scaleway archive destination found | Corrected full-archive capture; 5.35 GB encrypted secondary download and isolated Forgejo recovery passed, including all 2,040 package blobs |
|
||||
| net-kingdom-pg / state-hub-db | No native Barman destination observed | Do not infer protection from the shared cells' healthy backup status |
|
||||
| OpenBao / S1 host configuration | Not evaluated by this database restore | Their own encrypted snapshot/host backup and recovery contracts still apply |
|
||||
|
||||
|
|
@ -49,3 +49,9 @@ and replacement recovery. The full primary coverage gap belongs to S3 assurance
|
|||
RPF-WP-0038-T04 tracks the remaining primary full-archive delivery and application
|
||||
recovery contract. Native database recovery verified 142 repository records,
|
||||
six users and 2,040 package blob records; it did not recover the blob files.
|
||||
|
||||
Secondary full recovery evidence is
|
||||
`docs/evidence/RPF-WP-0029-secondary-restore-2026-09-06.json`. Immediate quota
|
||||
after rejected-fixture cleanup still reported 5.23 GB free versus the 5.35 GB
|
||||
current archive. Recheck quota before another upload and establish bounded
|
||||
retention/capacity; the 10 GiB account is not an indefinite archive store.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"schema": "platform.rejected-recovery-fixture-cleanup.v1",
|
||||
"status": "removed",
|
||||
"quota_before": {
|
||||
"quota_bytes": 10737418240,
|
||||
"used_bytes": 5502701722,
|
||||
"available_bytes": 5234716518
|
||||
},
|
||||
"artifact": "wp0029-recovery-forgejo-dump-20260904T001507Z.zip.age",
|
||||
"delete_http_status": 204,
|
||||
"quota_after": {
|
||||
"quota_bytes": 10737418240,
|
||||
"used_bytes": 5502701722,
|
||||
"available_bytes": 5234716518
|
||||
},
|
||||
"warden_exit_code": 0
|
||||
}
|
||||
24
docs/evidence/RPF-WP-0029-secondary-restore-2026-09-06.json
Normal file
24
docs/evidence/RPF-WP-0029-secondary-restore-2026-09-06.json
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"schema": "platform.forgejo-isolated-restore.v1",
|
||||
"status": "restored",
|
||||
"images": [
|
||||
"code.forgejo.org/forgejo/forgejo@sha256:e2684fd8707d486329084a695ed91999a4072a798e5409d45c1eb8a2911ff4b9",
|
||||
"postgres@sha256:ff23cdce56cac62ada6f66013e1a50864c0abbe79d132d40b6e05bd80f378a70"
|
||||
],
|
||||
"offsite_artifact": "wp0029-recovery-forgejo-dump-20260905-verified.zip.age",
|
||||
"ciphertext_sha256": "00d2a5b099bc0e65b2109287fca3bd9d6eb1c8a4e43623520a6e9f3379904018",
|
||||
"stage": "package_blob_recovery",
|
||||
"database_import": true,
|
||||
"database_counts": {
|
||||
"repositories": 142,
|
||||
"users": 6,
|
||||
"package_blobs": 2040
|
||||
},
|
||||
"application_health": true,
|
||||
"repositories_verified": [
|
||||
"coulomb/key-cape",
|
||||
"coulomb/adaptive-pricing"
|
||||
],
|
||||
"package_blobs_verified": 2040,
|
||||
"cleanup": true
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"schema": "platform.forgejo-isolated-restore.v1",
|
||||
"status": "failed",
|
||||
"images": [
|
||||
"code.forgejo.org/forgejo/forgejo@sha256:e2684fd8707d486329084a695ed91999a4072a798e5409d45c1eb8a2911ff4b9",
|
||||
"postgres@sha256:ff23cdce56cac62ada6f66013e1a50864c0abbe79d132d40b6e05bd80f378a70"
|
||||
],
|
||||
"offsite_artifact": "wp0029-recovery-forgejo-dump-20260905-verified.zip.age",
|
||||
"ciphertext_sha256": "00d2a5b099bc0e65b2109287fca3bd9d6eb1c8a4e43623520a6e9f3379904018",
|
||||
"stage": "isolated_database",
|
||||
"cleanup": true,
|
||||
"error": "isolated_restore_failed"
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"schema": "platform.forgejo-isolated-restore.v1",
|
||||
"status": "failed",
|
||||
"images": [
|
||||
"code.forgejo.org/forgejo/forgejo@sha256:e2684fd8707d486329084a695ed91999a4072a798e5409d45c1eb8a2911ff4b9",
|
||||
"postgres@sha256:ff23cdce56cac62ada6f66013e1a50864c0abbe79d132d40b6e05bd80f378a70"
|
||||
],
|
||||
"offsite_artifact": "wp0029-recovery-forgejo-dump-20260905-verified.zip.age",
|
||||
"ciphertext_sha256": "00d2a5b099bc0e65b2109287fca3bd9d6eb1c8a4e43623520a6e9f3379904018",
|
||||
"stage": "isolated_database",
|
||||
"failure_kind": "command_nonzero",
|
||||
"command_exit_code": 2,
|
||||
"cleanup": true,
|
||||
"error": "isolated_restore_failed"
|
||||
}
|
||||
25
docs/evidence/RPF-WP-0029-secondary-transfer-2026-09-06.json
Normal file
25
docs/evidence/RPF-WP-0029-secondary-transfer-2026-09-06.json
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"schema": "platform.real-offsite-recovery.v1",
|
||||
"status": "offsite_fetched_pending_isolated_restore",
|
||||
"quota_before": {
|
||||
"quota_bytes": 10737418240,
|
||||
"used_bytes": 149677429,
|
||||
"available_bytes": 10587740811
|
||||
},
|
||||
"artifact": "wp0029-recovery-forgejo-dump-20260905-verified.zip.age",
|
||||
"source_backup": "forgejo-dump-20260905-verified.zip.age",
|
||||
"kv_version": 3,
|
||||
"upload_http_status": 201,
|
||||
"download_http_status": 200,
|
||||
"ciphertext_bytes": 5353024293,
|
||||
"ciphertext_sha256": "00d2a5b099bc0e65b2109287fca3bd9d6eb1c8a4e43623520a6e9f3379904018",
|
||||
"decrypted": true,
|
||||
"plaintext_sha256": "fe53d156461387ea487cddc5d6a01f0b5e3debda6fa494c8b87afc8bc62b55b2",
|
||||
"quota_after": {
|
||||
"quota_bytes": 10737418240,
|
||||
"used_bytes": 5502701722,
|
||||
"available_bytes": 5234716518
|
||||
},
|
||||
"warden_exit_code": 0,
|
||||
"attended_session_completed": true
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue