Playbook, skeleton, image workflow, postgres consumer draft, wrap, place, and a files-only tenant-engine pilot. No implementation yet.
5.9 KiB
| id | type | title | domain | repo | status | owner | topic_slug | created | updated | parent_project | related | state_hub_workstream_id | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| RMGR-WP-0007 | workplan | Greenfield rapp wrap efficiency | infotech | repo-manager | proposed | grok | infotech | 2026-08-18 | 2026-08-18 | prj-state-hub-retirement |
|
b24d47cd-25d6-4473-b057-6a6f8387ab30 |
Greenfield rapp wrap efficiency
Goal
Make the Railiance managed-app wrap path usable from scratch for an application that has no rapp yet, without rereading the estate or hand-copying user-engine.
RMGR-WP-0006 proved the contract and the absorb path
(rapp-user-engine). This workplan turns that into a short playbook plus
commands that emit the expensive files. It does not apply to a
cluster, invent rails or reefs, or store secret values.
Source of the work: session follow-up on
docs/RailianceAppDeploymentGuide.md
after the user-engine rollout.
Defaults this workplan locks
- Primary rail:
rail-kubernetes. - Package type:
manifest-managed-platform-serviceunless the app already has a Helm chart. - Database: draft a
rapp-postgresconsumer. A dedicated Cluster is opt-in only when placement policy already says so. - Image: fleet
image.yamlin the app repo; pin by digest in the rapp. No workstation builds. railiance/app.tomlis optional, not part of the first wrap.bound_reefsand publicexposurestay unset until an explicit place / grant step.- Files stay authoritative. The hub is only updated via
fix-consistency.
Put a greenfield playbook at the front of the guide
id: RMGR-WP-0007-T01
status: todo
priority: high
state_hub_task_id: "dcf0b76c-05e8-44b4-b31a-33f0bc7273ce"
Update docs/RailianceAppDeploymentGuide.md so a new wrap does not
start in the user-engine absorb story.
- Add a one-page §0 Greenfield playbook: decide →
init→skeleton→ appimage.yaml→ postgres consumer draft →validate→place. - Keep axes, inventory, and the user-engine worked example as reference, not the default procedure.
- Refresh inventory:
rapp-user-engineisverified; mark P1/P4 as implemented; drop “scaffolder not implemented.” - State that
railiance/app.tomlis not required on the first wrap. - Point the default database path at a
rapp-postgresconsumer, not a dedicated Cluster.
Do not rewrite the family schemas here.
Generate a runtime skeleton from the app repo
id: RMGR-WP-0007-T02
status: todo
priority: high
state_hub_task_id: "2c2c8306-b5b0-467a-a1a5-20c0f979e13d"
Add rmgr rapp skeleton --path <rapp> --from-app <app>.
Inspect the app checkout (Containerfile EXPOSE / USER, documented
health paths defaulting to /healthz and /readyz, image name
forgejo.coulomb.social/coulomb/<app>). Emit:
manifests/Deployment, Service, ServiceAccount, default-deny plus explicit NetworkPolicy- Makefile targets
render,server-dry-run,deploy,status,verify-live,rollback DIGEST=… tools/render.pyandtools/verify_live.sh- a packaging test that forbids floating tags and secret values
Refuse Helm unless --package-type helm-managed-platform-service or a
chart already exists. Idempotent: do not overwrite reviewed manifests
without --force.
Install the fleet image-publish workflow on the app
id: RMGR-WP-0007-T03
status: todo
priority: high
state_hub_task_id: "ec2d8fbb-2945-4144-b75e-beddf54a8b87"
As part of wrap/skeleton, copy the fleet
.forgejo/workflows/image.yaml into the app repo when missing.
Do not invent registry credentials. Do not build on the workstation.
Document that the first deploy waits on the CI digest.
Draft the postgres consumer, do not apply it
id: RMGR-WP-0007-T04
status: todo
priority: medium
state_hub_task_id: "0fe3018a-b245-43b9-a0e2-e0ecb7f6d206"
Emit rapp-postgres/consumers/<app>.yaml as a draft file (or a
copy under the rapp docs/ / handoffs/ if the postgres repo is not a
sibling). Roles: owner / migration / runtime. Tenant-keying required.
Never write a dedicated CNPG Cluster unless --dedicated-postgres is
passed.
This task does not apply the consumer in rapp-postgres and does not
request a CCR.
Compose rmgr rapp wrap
id: RMGR-WP-0007-T05
status: todo
priority: high
state_hub_task_id: "001e7b30-2a86-41f2-b731-415125e3b3e6"
Add rmgr rapp wrap --app <app> --ownership-repo <app> --from-app <path> that runs init → skeleton → image workflow copy → consumer
draft → validate and stops. No bound_reefs, no cluster apply, no
exposure grant.
Refuse unknown rails, rapp- workload names, and overwrite of a live
declaration (same rules as init).
Explicit place command
id: RMGR-WP-0007-T06
status: todo
priority: medium
state_hub_task_id: "076a64c5-cd83-4f7c-ba51-f3c61e5464e8"
Add rmgr rapp place --path <rapp> --reef reef-railiance that sets
bound_reefs only. Refuse unknown reefs. Do not set
exposure.posture: public.
Pilot on tenant-engine, files only
id: RMGR-WP-0007-T07
status: todo
priority: high
state_hub_task_id: "e3845311-b560-4fc2-ad76-5939145350a7"
Run the wrap path against tenant-engine / rapp-tenant-engine.
Prefer absorbing tenant-engine/deploy/ when present over inventing a
second runtime.
Success: schema-valid declared or draft declaration, skeleton or
absorbed manifests, rmgr rapp validate passes, postgres consumer
draft exists, no cluster apply in this task.
rapp-secrets-engine is out of scope (likely not a long-running
workload). rapp-vergabe-teilnahme stays a railiance-apps residual.
Residuals
- Applying a drafted postgres consumer and CCR remains with
rapp-postgres/railiance-platform. - First production deploy of a wrapped tenant-engine is a later operator step, not this workplan.
- A
helm-managed-applicationschema enum remains arailiance-masterchange if the platform-service name still misleads after this path.