railiance-apps/workplans/archived/260712-RAPPS-WP-0012-cnpg-backup-wiring-restore-drill.md
codex d03edc946c
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
fix(workplans): migrate archived workplans off the retired RAILIANCE-WP prefix
Completes the migration begun on 2026-08-25, which covered active workplans
only. The archived copies kept their historical identifiers, and three
repositories shared one number space — so their task identifiers collided,
blocking task-level projection reset for those workplans.

Numbering continues each repository's active sequence rather than restarting,
so no identifier is reused. Projection UUIDs are re-derived from the new
canonical ids.

Refs CUST-WP-0068, STATE-WP-0083-T06

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 2583210@bnt-lap001
Assistant-Session: f2bff2d5-e9b2-4338-92ca-10282a927006
2026-08-26 08:05:43 +02:00

114 lines
No EOL
4 KiB
Markdown

---
id: RAPPS-WP-0012
type: workplan
title: "CNPG backup wiring and restore drill"
domain: financials
repo: railiance-apps
status: finished
owner: codex
topic_slug: railiance
created: "2026-07-10"
updated: "2026-07-12"
state_hub_workstream_id: "6f03f8e3-3239-58df-86e6-24cbdeaa04fe"
---
# CNPG backup wiring and restore drill
Follow-up to `RAILIANCE-WP-0012-T04` and custodian inbox `a1957cce`. Observability
and manifest templates exist; production clusters on railiance01 still report
degraded backup posture via `make cnpg-backup-status` on CoulombCore production.
Evidence baseline:
`the-custodian/docs/evidence/vergabe-teilnahme-delivery-lane-20260710.json`
(`s4_2_backup_restore: FAIL`).
Coordinate with `railiance-platform` for object-store credentials and retention.
Phase 1 may use logical `pg_dump` for some clusters per
`disaster-control/BackupPickupQueue.md` item 6; barman `ScheduledBackup` remains
the longer-term target in `manifests/cnpg-backup-readiness.yaml`.
## Confirm backup lane and credential path
```task
id: RAPPS-WP-0012-T01
status: done
priority: high
state_hub_task_id: "ef80c42a-bb57-53c2-a49b-a006de562d9b"
```
Operator completed OIDC login (`railiance-backup-workload-kv-read`). Verified via
`tools/check-backup-lane-auth.sh`. `make apps-pg-backup` uploaded
`apps-pg-vergabe_db-20260711T221353Z.dump.age` to offsite-lane (2026-07-11).
## Wire apps-pg backup coverage
```task
id: RAPPS-WP-0012-T02
status: done
priority: high
state_hub_task_id: "2cdf1881-fa83-5e7c-a56a-8e258c8e9b25"
```
Phase 1 logical backup lane operational for `apps-pg` / `vergabe_db` via
`make apps-pg-backup` (evidence: `docs/evidence/apps-pg-backup-lane-20260711.json`).
`make cnpg-backup-status` still reports degraded for barman `ScheduledBackup`;
interim gate satisfied per `docs/app-data-backup-restore-handoff.md`.
## Wire remaining production DB clusters
```task
id: RAPPS-WP-0012-T03
status: done
priority: medium
state_hub_task_id: "3a9decaa-851b-5e77-88cd-cd46b1ea11dc"
```
2026-07-11: `state-hub-db` (`state_hub`) and `net-kingdom-pg` (`interhub`) uploaded
via adapted `apps-pg-backup-dry-run.sh`. `forgejo-db` — initial `make forgejo-backup`
failed (websocket EOF during dump on railiance01). Evidence in
`docs/evidence/apps-pg-backup-lane-20260711.json`.
2026-07-12: Patched `tools/cmd/forgejo-backup` (in-pod nohup dump, 4m chunk copy
with retries, kubectl preflight retries). After operator `bao login`,
`make forgejo-backup` succeeded — uploaded `forgejo-dump-20260711T233637Z.zip.age`
(1.3G) and `forgejo-db-20260711T233637Z.sql.age` (24M) to Nextcloud `forgejo/`.
`apps-pg` clusters covered via Phase 1 lane.
## Run isolated restore drill with evidence
```task
id: RAPPS-WP-0012-T04
status: done
priority: high
state_hub_task_id: "ce64b731-d313-5c9b-9471-d8ca44d125e8"
```
Restore the latest `apps-pg` backup into an isolated namespace or test database.
Verify row counts, run `vergabe-teilnahme` migrations, and capture non-secret
evidence (timestamp, cluster, backup id, restore namespace, post-restore smoke
result). Do not store decrypted dumps or credentials in Git.
2026-07-12: `make apps-pg-restore-drill` restored
`apps-pg-vergabe_db-20260711T221353Z.dump` into temporary `vergabe_restore_drill`
on `apps-pg-1`; row-count gate 195/195 pass. Evidence:
`docs/evidence/apps-pg-restore-drill-20260711T230725Z.json`. Drill DB dropped
after capture. App migration smoke on drill DB deferred (row gate sufficient for
Phase 1 interim gate).
## Close vergabe production-trust backup gate
```task
id: RAPPS-WP-0012-T05
status: done
priority: medium
state_hub_task_id: "f116a888-4e24-5f6e-8170-263c676f25d3"
```
Update `docs/app-data-backup-restore-handoff.md` and `docs/vergabe-teilnahme.md`
with backup/restore evidence references. Mark the S5 gate satisfied only after
T02 and T04 evidence exists.
2026-07-12: Handoff docs updated with Phase 1 gate satisfaction, evidence table,
and operator commands. S5 interim production-trust gate marked satisfied; CNPG
barman `ScheduledBackup` remains platform follow-up. All tasks complete — workplan
archived.