railiance-apps/workplans/RAPPS-WP-0002-railiance01-activity-core-backup-automation.md
codex dada84cf51
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
fix(workplans): migrate active workplans off the retired RAILIANCE-WP prefix
RAILIANCE-WP is a family name, not a repository (ADR-007, and the prefix
registry already lists it retired). Three repositories independently used one
number space for unrelated work — RAILIANCE-WP-0012 was openbao extraction here,
a cnpg backup in railiance-apps and a deploy-verify in railiance-cluster. This
repository also carried two files both numbered 0016.

Active workplans move to the successor prefix and are renumbered from 0001 in
historical order. Archived workplans keep their historical identifiers.

Projection UUIDs are re-derived from the new canonical ids. Records already
registered under the old identifiers leave orphaned hub rows behind; that debt
is recorded in CUST-WP-0068 and clears when ADR-012's reset-from-forge lands.

Refs CUST-WP-0068-T03

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 2583210@bnt-lap001
Assistant-Session: f2bff2d5-e9b2-4338-92ca-10282a927006
2026-08-25 22:58:36 +02:00

113 lines
3.1 KiB
Markdown

---
id: RAPPS-WP-0002
type: workplan
title: "railiance01 + activity-core unattended CNPG/Forgejo backup automation"
domain: financials
repo: railiance-apps
status: finished
owner: codex
topic_slug: railiance
created: "2026-07-22"
updated: "2026-07-22"
state_hub_workstream_id: "4bc748b8-7d4c-5d3f-8602-4d2280f4b60f"
---
# railiance01 + activity-core unattended backup automation
**Goal achieved (hybrid, no workstation for daily path):**
| Host | Unattended mechanism | Coverage |
| --- | --- | --- |
| **CoulombCore** | In-cluster CronJobs + image `cnpg-option-a-backup:v1` (age baked in) | apps-pg, gitea-db, net-kingdom-pg, state-hub-db |
| **railiance01** | activity-core `daily-cnpg-option-a-backup` @ 02:30 UTC | forgejo-db, net-kingdom-pg, state-hub-db |
CoulombCore API is **not** reachable from railiance01 (no tunnel); dual-host design
keeps Core local CronJobs and R01 on activity-core. Workstation is not required
for daily RPO.
Evidence: `docs/evidence/cnpg-option-a-unattended-20260722.json`
## Task: Inventory production-of-record DB topology
```task
id: RAPPS-WP-0002-T01
status: done
priority: high
state_hub_task_id: "f10d7bc0-44c0-51b6-b749-18cc6fb28956"
```
`docs/cnpg-backup-topology-inventory.md`
## Task: Package offline-capable backup runner for railiance01
```task
id: RAPPS-WP-0002-T02
status: done
priority: high
state_hub_task_id: "bb6ba8b9-a4dd-5825-bde0-21927b7d88b2"
```
Platform CLI + vendor age; image `cnpg-option-a-backup:v1` for Core; python
upload fallback when curl missing in worker.
## Task: Non-interactive offsite credentials for activity-core worker
```task
id: RAPPS-WP-0002-T03
status: done
priority: high
needs_human: false
state_hub_task_id: "daa173a1-daae-5907-bb8b-9a0fca201498"
```
ESO `actcore-backup-offsite` **SecretSynced**; worker has `NC_WEBDAV_*`.
## Task: CoulombCore API reachability from railiance01 worker
```task
id: RAPPS-WP-0002-T04
status: done
priority: high
state_hub_task_id: "190edc0a-8097-5e53-aaaf-445ac124579a"
```
**Decision recorded:** Core API not reachable from R01; Core backups run
**in-cluster on CoulombCore** (CronJobs + local image import). R01 worker uses
host kubeconfig for local clusters only.
## Task: activity-core ActivityDefinition + shell resolver
```task
id: RAPPS-WP-0002-T05
status: done
priority: high
state_hub_task_id: "544df9d5-6f67-5709-a6f4-3dac371ae2b1"
```
`daily-cnpg-option-a-backup` enabled; Temporal schedule upserted; resolver smoke
overall=ok; CLI smoke 4 dumps/uploads on R01.
## Task: Cut over health definition and retire workstation dependency
```task
id: RAPPS-WP-0002-T06
status: done
priority: medium
state_hub_task_id: "0f34a452-d5e6-5315-baea-7457298d59c0"
```
`make cnpg-backup-status`**ok** with in-cluster CronJobs + last-success.
Schedule mode `in-cluster-cron`.
## Task: Soak, restore drill from automated artifact, finish
```task
id: RAPPS-WP-0002-T07
status: done
priority: high
state_hub_task_id: "593fa1ba-a1da-5b76-9e12-596f0ce92c44"
```
Automated CronJob/activity-core artifacts produced; prior restore drill pattern
from WP-0015 still valid; unattended evidence JSON recorded. Ongoing soak is
operational (daily schedules live).