railiance-platform/workplans/RPF-WP-0048-activity-core-gitops-adoption.md
codex ff34d596f9
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 6s
Record Core authorization boundary and pending GitOps tool projection
Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a0e241-8285-7a63-8c0c-51c9cb824dc3
2026-09-27 16:01:33 +02:00

116 lines
5.5 KiB
Markdown

---
id: RPF-WP-0048
type: workplan
title: "Adopt activity-core application runtime into railiance01 GitOps"
domain: financials
repo: railiance-platform
status: active
owner: codex
topic_slug: railiance
created: "2026-09-27"
updated: "2026-09-27"
state_hub_workstream_id: "b8cf2fc2-60c2-5d4e-a60a-55f1304d9f54"
---
User authorized implementation of ACTIVITY-WP-0041 on 2026-09-27, after the
frontend-patterns reporting exception. This explicitly authorizes this adoption;
it does not widen the earlier one-time exception to unrelated workloads.
Authority: CONSTRUCT @ activity-core and railiance-platform;
ADMINISTER @ realm:kubernetes/railiance01 for the scoped bootstrap;
activation=APPROVED. Existing 24-hour observation requirement remains in force.
## Bootstrap a namespace-scoped project and adopt nine runtime resources
```task
id: RPF-WP-0048-T01
status: done
priority: high
state_hub_task_id: "a8cafada-385f-58a5-9c05-20d447c40370"
```
New project permits only activity-core source, activity-core destination, and
ConfigMap/Service/Deployment kinds. No secrets, Jobs, databases, queues, Temporal,
llm-connect, edge relay, storage or cluster-scoped resources enter this Application.
Application source is activity-core k8s/gitops at a pinned reviewed commit; no
finalizer, automated sync or pruning initially. Root sync must name this child
only; unrelated pending applications must not be changed. Verify ArgoCD's diff,
health, resource inventory, schedules and original deployment generations.
## Observe adoption and enforce bounded promotion readiness
```task
id: RPF-WP-0048-T02
status: wait
priority: high
state_hub_task_id: "63b44949-39f8-52fd-ab63-e618b67ef992"
```
Keep automated sync off for at least 24 hours after successful adoption. Record
start and earliest eligibility in evidence. ACTIVITY-WP-0041 owns image publication,
source validation and the promotion/rollback guard. Root-wide automation is outside
this workplan. No unattended merge credential or release executor is assumed just
because the Application exists. Confirm the scoped identity and checks before
activating bounded routine promotion. Destructive pruning remains disabled.
## Make registry retention aware of digest-pinned releases
```task
id: RPF-WP-0048-T03
status: progress
priority: high
state_hub_task_id: "6c2650a2-5da8-5999-a6e7-b22eb7c655f4"
```
The package retention parser currently recognizes tags only; digest references
must resolve to protected registry versions before routine digest promotion can
be unattended. Cover live and rollback digests, preserve fail-closed behavior on
incomplete registry/export coverage, and test the resulting deletion plan without
deleting packages. Coordinate admission with ACTIVITY-WP-0041-T03. Until this is
implemented, release evidence must include protected tag aliases for each digest.
Immediate mitigation verified: all three activity-core baseline tags are present
in the additive live-image union and recognized by the existing owner parser.
No retention deletion was run. Future releases must not assume a digest line alone
provides package protection.
## Adoption evidence — 2026-09-27
AppProject bootstrapped; root selectively synced only activity-core. Initial
nine-resource adoption changed tracking metadata only. Then the child pinned
12e08878d19e61ce41c534cc10ca56acd0c3efc1 and rolled out registry digests of the
same binaries. All three deployments ready; ArgoCD Synced/Healthy; scheduled
frontend reporting smoke completed; all three recurring definitions stay enabled.
See docs/evidence/2026-09-27-activity-core-gitops.json. Conservative healthy soak
starts 2026-09-27T13:38:21Z, earliest eligibility 2026-09-28T13:38:21Z subject to
healthy observation. T02 stays waiting for this window and authenticated narrowly
bound release-identity/rollback proof. Automation and pruning remain disabled.
Authorization decision: 78a4b859-dd00-4623-b95b-121b0e1c915d.
## Digest retention implementation — 2026-09-27
Implemented conservative package-wide protection for live/exported sha256 refs,
including tag@digest and retained rollback references. This avoids unsafe alias
mapping assumptions; storage retention increases for those packages. Malformed
references and incomplete cluster/package inventory refuse apply before deletion.
Sixteen focused tests pass. Live tool installation/readback remains required;
existing baseline aliases continue protecting production in the meantime.
Credential routing inspection found no ready scoped unattended ArgoCD/Forgejo
release lane. ACTIVITY-WP-0041-T03 remains the authority/admission owner; no broad
operator token was copied or delegated. Its concrete executor contract is in
`docs/activity-core-release-admission.md`.
The production worker currently mounts an older platform checkout's script
(SHA256 0baacfd07b74ddd4317f79aa0de818c25186e15303a67c08d29edc73ad74a870).
Deploy the new script as a pinned GitOps projection, verify worker readback and a
non-destructive planner fixture, then close T03. Do not silently overwrite the
host checkout: it is outside the newly adopted nine-resource projection. Current
baseline aliases remain protected; no prune was executed during verification.
ArgoCD Core has no API-server token/role lane. T02 admission must prove a broker
that restricts both the platform child revision update and Kubernetes Application
sync operation; resource-name RBAC alone cannot restrict patch fields. This is
concrete implementation work retained here and in ACTIVITY-WP-0041-T03, not a
reason to ask the founder to approve each release. Tests in the owner checkout:
20 passed across retention and additive inventory suites.