Rename RAILIANCE-WP-0017..0021 to RMASTER-WP-* so railiance-master IDs no longer collide with railiance-platform's RAILIANCE-WP series. Hub UUIDs are unchanged.
18 KiB
| id | type | title | domain | repo | status | owner | topic_slug | planning_priority | planning_order | created | updated | related_repos | state_hub_workstream_id | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| RMASTER-WP-0019 | workplan | Knative Qonto Runtime on reef-railiance | financials | railiance-master | finished | codex | railiance | high | 19 | 2026-07-26 | 2026-07-29 |
|
d2b082db-ecc3-4322-8be3-22aa00a2af5c |
RMASTER-WP-0019 - Knative Qonto Runtime on reef-railiance
Goal
Turn the Qonto internet-runtime direction into an explicit second-wave
Railiance repo-family plan: reef-railiance hosts a new rail-knative, and
that rail dynamically runs a new rapp-qonto package extracted from the
current qonto-assistant deployment path.
This workplan exists to replace the remaining "custom activator or maybe Knative" ambiguity with a concrete cross-repo architecture path before new runtime implementation starts.
The second-wave design also establishes a general rule for reliable and cost-efficient operation: deterministic work should progress from attended human operation, to agent-executable interaction, to idempotent functional automation as its contract stabilizes. Human interaction remains appropriate for irreducible policy acceptance and privileged authority, not for repeated evidence collection or routine reconciliation.
Why This Exists
RMASTER-WP-0018 finished the first wave:
rail-kubernetesexists as the default base railreef-railianceexists as the grouped home reef for the Railiance serversrapp-openbaoproved the first managed package split- Fabric can now project
governed_by,supports_rail,hosts_rail, andbinds_rapp
The next concrete runtime pressure comes from QONTO-WP-0004. That workload
needs internet reachability, bounded cold-start behavior, strong identity, and
strict secret custody. Those are exactly the conditions that justify a second
rail instead of extending the direct rail-kubernetes path indefinitely.
At the same time, KEY-WP-0004 is provisioning the first tenant and workload
identity lane for Binky Hedgehog GmbH. That lane should target the future
runtime package and not harden a permanent direct deployment shape that the
framework now intends to replace.
Current Starting Point
The current ecosystem state is:
reef-railianceis the grouped reef for the Railiance server fleetrail-kubernetesowns the current baseline deployment and lifecycle contractqonto-assistantalready contains the Qonto domain code, hardening work, and an initial direct Kubernetes placement requestkey-capehasKEY-WP-0004open for the Binky tenant and qonto workload identity lane- no
rail-knativerepo exists yet - no
rapp-qontorepo exists yet
Target Outcome
When this workplan is complete:
- The boundary between
rail-kubernetesand a new derivedrail-knativeis written and approved. - The boundary between
qonto-assistantand a futurerapp-qontois written and approved. reef-railianceis confirmed as the first host reef for this runtime path, including the rail/reef binding assumptions.- Identity, secret, and routing lanes are aligned to the future
rapp-qontoruntime instead of a permanent directqonto-assistantdeployment. - Repo-local follow-up workplans can launch
rail-knativeandrapp-qontowithout reopening the architecture question. - Reef admission, contract compatibility, credential routing, and operational evidence have automation-ready contracts before production implementation.
Boundaries
This workplan may define architecture, sequencing, and repo-boundary contracts
across Railiance, qonto-assistant, and key-cape.
It must not:
- bootstrap
rail-knativeyet - bootstrap
rapp-qontoyet - move code or manifests between repos
- implement runtime changes in
reef-railiance,rail-kubernetes,qonto-assistant, orkey-cape
Implementation starts only after the follow-up workplans opened from this plan are reviewed and accepted.
Tasks
T01 - Define the rail-knative boundary against rail-kubernetes
id: RMASTER-WP-0019-T01
status: done
priority: high
state_hub_task_id: "336cb298-9107-4519-ad64-5b23853c84fa"
Write the contract for what rail-knative must own versus what remains owned
by rail-kubernetes.
At minimum this boundary must decide ownership for:
- scale-to-zero and cold-start semantics
- service activation / ingress entry behavior
- Knative Serving primitives versus generic Railiance lifecycle semantics
- compatibility expectations for
reef-railiance - what stays reusable from the base Kubernetes rail instead of being forked
Acceptance:
- one written boundary contract exists
- the contract names explicit non-goals for
rail-knative - the split does not duplicate the generic lifecycle contract already owned by
rail-kubernetes
2026-07-26: Added docs/rail-composition-contract.md and
docs/adr/ADR-0005-derived-rail-composition.md. rail-knative is now a
derived rail with a versioned rail-kubernetes base contract. The contract
defines inheritance, overrides, non-goals, readiness states, and a rail-neutral
workload/binding model.
T02 - Define the rapp-qonto extraction boundary from qonto-assistant
id: RMASTER-WP-0019-T02
status: done
priority: high
state_hub_task_id: "54fcea7d-3c4e-444f-b184-f18f3c4b3a7c"
Write the contract for what moves into rapp-qonto and what stays in
qonto-assistant.
This task must keep qonto-assistant as the ownership home for the Qonto
domain logic while using rapp-qonto as the managed runtime/package boundary.
At minimum the contract must decide ownership for:
- deployment packaging and runtime manifests
- runtime configuration and secret references
- smoke, rollout, rollback, and promotion expectations
- how the current direct Kubernetes material becomes migration input rather than a permanent target shape
Acceptance:
- one written boundary contract exists
qonto-assistantremains the ownership repo in the contractrapp-qontois justified as a managed package repo and not as a new ownership mirror
2026-07-26: Added the ownership and request-flow boundary in
docs/qonto-knative-runtime-contract.md. qonto-assistant retains domain
logic, financial policy, authorization integration, and application audit
events. rapp-qonto owns packaging, rail bindings, runtime configuration,
secret references, and workload-specific rollout evidence.
T03 - Define the reef-railiance hosting model for the qonto runtime
id: RMASTER-WP-0019-T03
status: done
priority: high
state_hub_task_id: "b0233f06-3dee-4cac-bae4-d8add5ac29c8"
Confirm how reef-railiance hosts the first rail-knative runtime slice and
what that means for ingress, isolation, and criticality.
This task must decide:
- whether the qonto path lives entirely on
reef-railiancein wave 2 - how
rail-knativeis declared as a hosted rail there - whether a primary-rail versus mixed-rail statement needs revision
- what existing S1/S2 approvals or substrate notes must be updated before runtime work starts
Acceptance:
- the hosting assumption is written
- the reef/rail relation update path is named
- unresolved substrate risks are listed instead of buried in repo-local work
2026-07-26: Added docs/reef-production-readiness-contract.md and
docs/adr/ADR-0006-reef-production-admission.md. reef-railiance may host
rail-knative during wave 2 while keeping rail-kubernetes primary, but
topology no longer implies readiness. Critical Qonto admission requires
capacity, ingress, identity, isolation, observability, recovery, and explicit
single-server/shared-control-plane risk evidence.
T04 - Align identity and secret custody to the future runtime path
id: RMASTER-WP-0019-T04
status: done
priority: high
state_hub_task_id: "0086eb68-a852-4fe7-834c-4a19dd763b77"
Align KEY-WP-0004, the OpenBao lane, and the ops-warden routing lane so the
credential path terminates at the future rapp-qonto runtime on
rail-knative, while still allowing a clearly temporary migration bridge from
the current qonto-assistant repo.
Acceptance:
- the future runtime principal and lane names are defined
- the transitional use of any current
qonto-assistantruntime role is explicitly marked temporary - no workplan still assumes a permanent direct deployment target for the lane
2026-07-26: docs/qonto-knative-runtime-contract.md defines steady identifiers
for rapp-qonto, its service account, OpenBao role, and caller client while
making any qonto-assistant role a time-bounded bridge. Credential values must
use sanctioned custody and execution transports; only route and conformance
metadata may enter workplans, Git, chat, or State Hub.
T05 - Define second-wave bootstrap and Fabric registration sequence
id: RMASTER-WP-0019-T05
status: done
priority: medium
state_hub_task_id: "8905d447-dee9-460d-bbfe-3f0c8e42c7c6"
Define the repo-creation and registration sequence for rail-knative and
rapp-qonto, using the first-wave bootstrap contract already proven by
RMASTER-WP-0018.
Acceptance:
- the bootstrap order is named
- the minimum declaration files are named for both future repos
- the expected Fabric relations (
supports_rail,hosts_rail,binds_rapp,governed_by) are named before repo creation starts
Bootstrap order:
- publish the common contract/schema additions in
rail-kubernetes - add readiness and compatibility support in Fabric
- open the
reef-railianceadmission work and collect baseline evidence - bootstrap
rail-knativewith a derived-rail declaration - bootstrap
rapp-qontowith common and Knative binding declarations - register
governed_by,base_rail,supports_rail,hosts_rail, andbinds_rapprelations - promote relations through
declared,installed,verified, andproduction-approvedonly as evidence lands
The minimum declaration files remain declarations/rail.yaml,
declarations/rapp.yaml, and declarations/reef.yaml. Rail-neutral workload
and rail-binding schemas must be source-controlled before repo creation is
treated as implementation completion.
T06 - Open the repo-local follow-up workplans for implementation
id: RMASTER-WP-0019-T06
status: done
priority: medium
state_hub_task_id: "18fe6f04-f8c5-451b-8e3f-38c19f05f682"
Once the boundary and sequencing documents exist, open or update the concrete repo-local implementation workplans that will execute them.
At minimum, this should cover:
qonto-assistantkey-capereef-railiance- the future
rail-knativerepo at bootstrap time - the future
rapp-qontorepo at bootstrap time
Acceptance:
- each implementation-owning repo has a concrete follow-up workplan
- no implementation starts from an unwritten architecture assumption
- this framework workplan can later close with repo-local execution delegated
2026-07-26: Architecture is ready for repo-local workplan creation. Workplans must separate source-repo, package, derived-rail, reef admission, Fabric compatibility, identity/custody, and S2 runtime installation responsibilities.
2026-07-26: Opened and State Hub registered repo-local execution work in
rail-kubernetes, rail-knative, rapp-qonto, reef-railiance,
railiance-fabric, qonto-assistant, and key-cape. The two new repos were
reconciled with their existing Forgejo bootstrap commits and pushed.
T07 - Version the rail-neutral workload and compatibility contract
id: RMASTER-WP-0019-T07
status: done
priority: high
state_hub_task_id: "5b5f2d41-2860-44ee-a8b6-8b9e1d32854f"
Turn the composition decision into source-controlled schemas and conformance checks.
Acceptance:
- workload declarations separate common facts from rail bindings
- base and derived rails declare contract versions and compatibility
- validation rejects missing owners, incompatible base rails, and unsupported substrate capabilities
- Kubernetes remains the default binding for platform workloads
2026-07-26: rail-kubernetes now publishes base contract 1.0.0, common
workload, rail-binding, and derived-rail schemas, a Kubernetes-default example,
and an offline validator. rail-knative and rapp-qonto pass that validator.
T08 - Establish reef admission evidence and mixed-rail split triggers
id: RMASTER-WP-0019-T08
status: done
priority: high
state_hub_task_id: "663a319e-2a05-4a35-90a2-4f6b7b5afa22"
Implement the production-readiness states and evidence model in
reef-railiance and Fabric.
Acceptance:
- topology is distinct from installed, verified, and production-approved state
- capacity, ingress, network, identity, observability, recovery, and failure domain evidence have machine-readable locations
- Qonto's single-server/shared-control-plane residual risk is explicit
- mixed-rail split triggers are represented
2026-07-26: Added a reusable, secret-free substrate preflight in
railiance-cluster and recorded the failed API reachability result as reef
evidence with block_installation. Declared topology was not promoted.
2026-07-26: After the server upgrade, the server-side preflight and complete Knative lifecycle verification passed. Reef evidence now distinguishes the verified rail from blocked production approval and retains capacity and single-node split triggers.
T09 - Establish Qonto SLO, threat, rollback, and fallback evidence
id: RMASTER-WP-0019-T09
status: done
priority: high
state_hub_task_id: "6cc2d3a7-33b6-47a7-b59d-04be9318c861"
Turn docs/qonto-knative-runtime-contract.md into executable package and
source-repo verification.
Acceptance:
- cold start, request timeout, buffering, concurrency, and scale-down values are measured before production approval
- retry and idempotency behavior is explicit for financial operations
- public ingress and raw service exposure boundaries are testable
- egress is narrower than unrestricted HTTPS or has an approved exception
- rollback prefers a verified Knative revision; direct Kubernetes fallback is time-bounded and exceptional
2026-07-26: rapp-qonto now has offline-validated, cluster-local,
digest-pinned, bounded Knative packaging with scale-to-zero, default-deny
networking, ExternalSecret references, and an explicit unverified FQDN egress
gate. Live SLO, identity, failure, and rollback evidence remains outstanding.
2026-07-27: Deployed digest-addressed revision rapp-qonto-00004 on
rail-knative. The fail-closed proxy gate and cluster-local health smoke pass.
Full cold-start timing, audit/idempotency, revocation, dependency-failure, and
previous-revision rollback evidence remains before T09 completion.
2026-07-29: rapp-qonto/tools/verify_live.sh now records reversible,
machine-readable live evidence. The successful railiance01 run measured a
7.384443-second cold activation from zero and proved bounded repeat requests,
metadata-only secret delivery, fail-closed proxy loss, recovery,
missing-secret denial and restoration, previous-revision rollback, and return
to latest traffic. The owner repository's 80-test suite supplies the
domain-level audit, idempotency, authorization, and redaction evidence.
T10 - Automate routing, conformance, reconciliation, and evidence
id: RMASTER-WP-0019-T10
status: done
priority: high
state_hub_task_id: "1b75308f-f968-4443-aefe-af37550545a1"
Move repeatable operation toward reliable functional automation while preserving least privilege and explicit risk authority.
Acceptance:
warden planand route lookup cover implementation credential needs before any founder interaction is proposed- agents use sanctioned
--exec,--out, or wrapped transports rather than reading secret values - conformance checks are idempotent and suitable for CI or scheduled execution
- Fabric/State Hub reconciliation consumes source declarations and evidence
- human steps are limited to named authority or residual-risk decisions and have an automation follow-up path
2026-07-26: Generic Knative and Qonto conformance is executable offline. The cluster preflight is idempotent and read-only. Credential routing was attempted first; its unrelated Forgejo match is tracked as a catalog-quality gap rather than used for Kubernetes access.
2026-07-26: The cluster now has checksum-locked, idempotent Serving/Kourier installation and live verification automation. The configured SSH lane provides agent execution while direct public API access remains unnecessary.
2026-07-27: KeyCape client credentials are live, their OpenBao custody and
rotation route is published as rapp-qonto-keycape-client, and the M3/prod
posture manifest passes. Public kc.coulomb.social DNS still targets the
older CoulombCore endpoint; railiance01 verification currently uses direct
TLS-preserving resolution pending routing convergence.
2026-07-29: Credential needs are routed before access, installation and verification use sanctioned SSH execution without secret output, and the live gate is idempotent, reversible, and emits secret-free JSON suitable for CI or scheduled reconciliation. Source declarations and reef bindings now consume the verified evidence. The only remaining human authority is the explicitly separate production acceptance or mitigation of single-node failure-domain risk.
Exit Criteria
rail-knativehas a written boundary againstrail-kubernetesrapp-qontohas a written boundary againstqonto-assistantreef-railianceis explicitly named as the first host reef- identity and secret custody point at the future runtime path
- derived-rail composition and non-duplication are decided
- reef readiness and mixed-rail split rules are decided
- Qonto end-to-end failure, rollback, and security boundaries are written
- common and rail-binding schemas are implemented
- repo-local implementation workplans are registered and active
- conformance and credential-routing paths are agent-executable
- second-wave repo bootstrap order is defined
- repo-local implementation workplans exist before implementation begins
Notes
This is a second-wave framework plan. It should stay at the planning and coordination layer until the relevant repo-local workplans are in place.