Record rejected historical backup, verified fresh capture and worker activation
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a06ecb-456a-71c2-b41e-0755d336e883
This commit is contained in:
codex 2026-09-05 22:35:20 +02:00
parent 34b9385bee
commit 195a51a62c
7 changed files with 166 additions and 7 deletions

View file

@ -7,7 +7,7 @@ Workplan: `RAIL-HO-WP-0005` T04/T09 · Decision: Option A (Nextcloud + age)
| Artifact | Source | Format |
| --- | --- | --- |
| Blob state | `forgejo dump` in production pod | zip → age |
| PostgreSQL | `pg_dump -Fc` from CNPG `forgejo-db` | custom dump → age |
| PostgreSQL | `pg_dump --no-owner --no-acl` from CNPG `forgejo-db` | SQL → age |
Covers git repos, packages (OCI/npm/generic), attachments, LFS, avatars, and DB metadata.
@ -20,11 +20,12 @@ make forgejo-backup # encrypt + upload to Nextcloud forgejo/
make forgejo-backup-status # last success + 7-day gate hint
```
Requires: `kubectl`, `age`, `curl`, `KUBECONFIG=~/.kube/config-hosteurope`.
Requires: `kubectl`, `age`, Python 3, and curl or the Python upload backend.
Set `KUBECONFIG` to the currently verified railiance01 access path.
Preflight: `forgejo-db` pod must be Ready (`make forgejo-db-status`). A full dump
with 13 org repos is ~670MiB — allow 1020 minutes for stream + age on a typical
workstation link.
Preflight: `forgejo-db` pod must be Ready (`make forgejo-db-status`). The validated 2026-09-05 full archive is 5,351,717,533 bytes before age encryption.
Allow for substantial transfer time and check the account quota before upload.
This size supersedes the historical ~670 MiB estimate.
Uploads require the governed `CCR-2026-0004` OpenBao offsite lane or explicitly
provided `RAILIANCE_BACKUP_NC_TOKEN` / `RAILIANCE_BACKUP_NC_WEBDAV_URL` inputs.
@ -79,3 +80,21 @@ See `railiance-infra`:
Download and decrypt a dump from Nextcloud, set `BACKUP_LOCAL` to the zip path,
then run the drill script.
## Archive-integrity incident — 2026-09-05
The September 4 encrypted cache sample decrypted but failed ZIP validation.
The backup command now waits for the exact dump process to succeed, checks
transfer size/hash and validates ZIP CRCs before encryption/upload. A fresh
5.35 GB archive passed these checks. This does not certify the other historical
backups or establish a completed offsite application restore. See WP-0029 and
its dated evidence; never report a nonempty file as a successful backup.
Activity-core currently receives the validated entry point through the immutable
`backup-verified-0220ca56520c` bundle, applied by
`scripts/deploy_verified_backup_bundle.py`. The wrapper mounts over the existing
backup entry point; helpers/libraries live at `/opt/railiance-backup-verified`.
Reapply the source-owned delivery helper after reviewed backup changes and verify
its hash/rollout receipt. Roll back through the previous worker ReplicaSet; do
not edit another machine's host checkout or remove referenced ConfigMaps.