railiance-apps/workplans/RAILIANCE-WP-0016-railiance01-activity-core-backup-automation.md
codex b5151225ba
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
fix(workplans): adopt ADR-007 derived identifiers for unregistered records
These workplans exist only in the retired local hub. Their random pre-ADR-007
identifiers are refused by C-06 as stale references, so they cannot be
registered. Deriving from the canonical record id takes no identity from
anything: central does not hold them and the old ids die with the cache.

Records central already holds were deliberately left untouched.

Refs CUST-WP-0068-T06

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

3.1 KiB

id type title domain repo status owner topic_slug created updated state_hub_workstream_id
RAILIANCE-WP-0016 workplan railiance01 + activity-core unattended CNPG/Forgejo backup automation financials railiance-apps finished codex railiance 2026-07-22 2026-07-22 857ca302-bb94-5d41-a649-1aa966368df4

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: RAILIANCE-WP-0016-T01
status: done
priority: high
state_hub_task_id: "475b8930-1e75-580b-a5e4-ce14b038c0ce"

docs/cnpg-backup-topology-inventory.md

Task: Package offline-capable backup runner for railiance01

id: RAILIANCE-WP-0016-T02
status: done
priority: high
state_hub_task_id: "a2ca2b69-f089-5ae4-8c97-bc031503f304"

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: RAILIANCE-WP-0016-T03
status: done
priority: high
needs_human: false
state_hub_task_id: "159eefae-d81c-57db-969f-0f9fcecdbc18"

ESO actcore-backup-offsite SecretSynced; worker has NC_WEBDAV_*.

Task: CoulombCore API reachability from railiance01 worker

id: RAILIANCE-WP-0016-T04
status: done
priority: high
state_hub_task_id: "cf63809e-f73e-5306-abba-daf8a41ab72d"

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: RAILIANCE-WP-0016-T05
status: done
priority: high
state_hub_task_id: "44c19ca1-a627-561e-88ba-4cf642bd5594"

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: RAILIANCE-WP-0016-T06
status: done
priority: medium
state_hub_task_id: "5b230dae-8916-5efa-a395-fd472e025920"

make cnpg-backup-status → ok with in-cluster CronJobs + last-success. Schedule mode in-cluster-cron.

Task: Soak, restore drill from automated artifact, finish

id: RAILIANCE-WP-0016-T07
status: done
priority: high
state_hub_task_id: "cb64ec26-4e02-54cf-807b-1d3ddbcba21c"

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