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

3.1 KiB

id type title domain repo status owner topic_slug created updated state_hub_workstream_id
RAPPS-WP-0002 workplan railiance01 + activity-core unattended CNPG/Forgejo backup automation financials railiance-apps finished codex railiance 2026-07-22 2026-07-22 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

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

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

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

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

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

id: RAPPS-WP-0002-T06
status: done
priority: medium
state_hub_task_id: "0f34a452-d5e6-5315-baea-7457298d59c0"

make cnpg-backup-statusok with in-cluster CronJobs + last-success. Schedule mode in-cluster-cron.

Task: Soak, restore drill from automated artifact, finish

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).