2026-07-30 16:37:59 +02:00
|
|
|
|
---
|
|
|
|
|
|
id: TREV-WP-0011
|
|
|
|
|
|
type: workplan
|
|
|
|
|
|
title: "Deploy Trust Service and Control Plane to the Railiance reef"
|
|
|
|
|
|
domain: infotech
|
|
|
|
|
|
repo: target-revenue
|
|
|
|
|
|
status: active
|
|
|
|
|
|
owner: claude
|
|
|
|
|
|
topic_slug: infotech
|
|
|
|
|
|
created: "2026-07-30"
|
2026-08-05 16:41:00 +02:00
|
|
|
|
updated: "2026-08-05"
|
2026-07-30 16:38:41 +02:00
|
|
|
|
state_hub_workstream_id: "f40fa906-9fbc-4445-9ebc-62ec46ac17b5"
|
2026-07-30 16:37:59 +02:00
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
# Deploy Trust Service and Control Plane to the Railiance reef
|
|
|
|
|
|
|
|
|
|
|
|
Deploy the hosted Trust Service (`service/app.py`, WP-0006) and the
|
|
|
|
|
|
Control Plane interactive UI (`service/control_plane_app.py`, WP-0009-T04)
|
|
|
|
|
|
to Railiance infrastructure-as-code, on a rail hosted in `reef-railiance`'s
|
|
|
|
|
|
grouped home substrate, fronted by the subdomain `revenue.coulomb.social`.
|
|
|
|
|
|
|
2026-08-05 16:41:00 +02:00
|
|
|
|
Operator guide: `docs/deployment.md`.
|
|
|
|
|
|
|
|
|
|
|
|
**Note (2026-08-05):** WP-0008-T05 has since accepted the first real Phase
|
|
|
|
|
|
(`trsl:phase:info-tech-canon-service-surface`). Deployment still does not
|
|
|
|
|
|
by itself declare additional Phases; it hosts the Trust Service the pilot
|
|
|
|
|
|
already uses (local pilot today → public host when this workplan finishes).
|
2026-07-30 16:37:59 +02:00
|
|
|
|
|
|
|
|
|
|
```task
|
|
|
|
|
|
id: TREV-WP-0011-T01
|
2026-08-05 16:41:00 +02:00
|
|
|
|
status: done
|
2026-07-30 16:37:59 +02:00
|
|
|
|
priority: high
|
|
|
|
|
|
human_accept_required: true
|
2026-08-05 16:41:00 +02:00
|
|
|
|
human_accepted_by: Bernd
|
|
|
|
|
|
human_accepted_at: "2026-08-05"
|
2026-07-30 16:38:41 +02:00
|
|
|
|
state_hub_task_id: "8dffe5e1-6f2b-4020-ac07-a108a8fc2edc"
|
2026-07-30 16:37:59 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-08-05 16:41:00 +02:00
|
|
|
|
**Decide the deployment pattern (human gate).**
|
|
|
|
|
|
|
|
|
|
|
|
**Result (2026-08-05):** Recommended package recorded and implemented.
|
|
|
|
|
|
Maintainer continued with "go on" after declining alternate TUI options —
|
|
|
|
|
|
treated as acceptance of the recommended package:
|
|
|
|
|
|
|
|
|
|
|
|
| Bullet | Decision |
|
|
|
|
|
|
| --- | --- |
|
|
|
|
|
|
| Manifest home | `target-revenue/k8s/railiance/` + ArgoCD Application in `railiance-platform` (issue-core pattern) |
|
|
|
|
|
|
| Process topology | Single process: `service/combined.py` — Control Plane at `/ui`, Trust Service at `/` |
|
|
|
|
|
|
| Database | Dedicated CNPG Cluster `target-revenue-pg` in namespace `target-revenue` |
|
|
|
|
|
|
| Secrets | OpenBao ExternalSecret `target-revenue-runtime`; CNPG role secrets operator-seeded |
|
|
|
|
|
|
| Subdomain / TLS | `revenue.coulomb.social` + `letsencrypt-prod` (proven by `forgejo.coulomb.social`) |
|
|
|
|
|
|
| Founding credential | Idempotent Job + `scripts/bootstrap_binky.py` |
|
2026-07-30 16:37:59 +02:00
|
|
|
|
|
|
|
|
|
|
```task
|
|
|
|
|
|
id: TREV-WP-0011-T02
|
2026-08-05 16:41:00 +02:00
|
|
|
|
status: done
|
2026-07-30 16:37:59 +02:00
|
|
|
|
priority: high
|
2026-07-30 16:38:41 +02:00
|
|
|
|
state_hub_task_id: "d4b3dae4-eb2a-4bed-bc10-5ce90d972cec"
|
2026-07-30 16:37:59 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-08-05 16:41:00 +02:00
|
|
|
|
**Containerize.**
|
|
|
|
|
|
|
|
|
|
|
|
**Result:** `Dockerfile` builds `.[service]`, includes migrations/schemas/
|
|
|
|
|
|
policies/profiles, non-root uid 10001, entrypoint
|
|
|
|
|
|
`scripts/docker-entrypoint.sh` → uvicorn
|
|
|
|
|
|
`target_revenue.service.combined:app`. Image tag convention:
|
|
|
|
|
|
`forgejo.coulomb.social/coulomb/target-revenue:0.1.0`. Also: `/healthz` on
|
|
|
|
|
|
both apps + combined; migrate/bootstrap entry modes via env flags.
|
2026-07-30 16:37:59 +02:00
|
|
|
|
|
|
|
|
|
|
```task
|
|
|
|
|
|
id: TREV-WP-0011-T03
|
2026-08-05 16:41:00 +02:00
|
|
|
|
status: done
|
2026-07-30 16:37:59 +02:00
|
|
|
|
priority: high
|
2026-07-30 16:38:41 +02:00
|
|
|
|
state_hub_task_id: "06567eb5-d924-4100-9cd5-19478121c3c7"
|
2026-07-30 16:37:59 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-08-05 16:41:00 +02:00
|
|
|
|
**Provision the database and secrets** (manifests).
|
|
|
|
|
|
|
|
|
|
|
|
**Result:** `k8s/railiance/cnpg-cluster.yaml` (dedicated Cluster),
|
|
|
|
|
|
`externalsecret.yaml` (OpenBao path
|
|
|
|
|
|
`workloads/target-revenue/runtime-secrets`), `migrate-job.yaml` (applies
|
|
|
|
|
|
0001–0007 via `scripts/apply_migrations.py`). Live secret provisioning
|
|
|
|
|
|
and first Cluster bootstrap remain **operator steps** (OpenBao + CNPG
|
|
|
|
|
|
credential Secrets) — see `docs/deployment.md` checklist.
|
2026-07-30 16:37:59 +02:00
|
|
|
|
|
|
|
|
|
|
```task
|
|
|
|
|
|
id: TREV-WP-0011-T04
|
2026-08-05 16:41:00 +02:00
|
|
|
|
status: done
|
2026-07-30 16:37:59 +02:00
|
|
|
|
priority: high
|
2026-07-30 16:38:41 +02:00
|
|
|
|
state_hub_task_id: "e6ecf3e5-3a9d-4f00-92b1-a05817b19013"
|
2026-07-30 16:37:59 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-08-05 16:41:00 +02:00
|
|
|
|
**Helm chart, Ingress, and ArgoCD wiring.**
|
|
|
|
|
|
|
|
|
|
|
|
**Result:** Kustomize (not Helm) under `k8s/railiance/`: Deployment,
|
|
|
|
|
|
Service, Ingress (`revenue.coulomb.social`, letsencrypt-prod), migrate +
|
|
|
|
|
|
bootstrap Jobs. ArgoCD Application:
|
|
|
|
|
|
`railiance-platform/argocd/applications/target-revenue.application.yaml`
|
|
|
|
|
|
(project `railiance-tenants`, automated sync, CreateNamespace).
|
2026-07-30 16:37:59 +02:00
|
|
|
|
|
|
|
|
|
|
```task
|
|
|
|
|
|
id: TREV-WP-0011-T05
|
|
|
|
|
|
status: todo
|
|
|
|
|
|
priority: medium
|
2026-07-30 16:38:41 +02:00
|
|
|
|
state_hub_task_id: "37847415-19c4-43b5-8b0d-de7a4211bfdd"
|
2026-07-30 16:37:59 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-08-05 16:41:00 +02:00
|
|
|
|
**Bootstrap and smoke-test the live deployment.**
|
|
|
|
|
|
|
|
|
|
|
|
**Remaining operator work** (not fully automatable from this workstation
|
|
|
|
|
|
without cluster credentials + OpenBao write + DNS + image push):
|
|
|
|
|
|
|
|
|
|
|
|
1. DNS A/CNAME for `revenue.coulomb.social`
|
|
|
|
|
|
2. Seed OpenBao runtime secrets + CNPG bootstrap Secrets
|
|
|
|
|
|
3. `docker build/push` image `0.1.0`
|
|
|
|
|
|
4. Commit/push Application + app manifests; wait for ArgoCD sync
|
|
|
|
|
|
5. Confirm TLS + `/ui/login` + `/healthz`
|
|
|
|
|
|
6. Migrate pilot Phase ledger from local `trf-pilot-pg` if public instance
|
|
|
|
|
|
becomes the new authority
|
|
|
|
|
|
|
|
|
|
|
|
Docs ready: `docs/deployment.md`. No production smoke Phase will be
|
|
|
|
|
|
registered (append-only; pilot Phase already exists).
|