--- id: CUST-WP-0058 type: workplan title: "Business platform enablement — decisions, service contract, client plane" domain: infotech repo: the-custodian status: finished owner: codex topic_slug: custodian created: "2026-07-10" updated: "2026-07-10" state_hub_workstream_id: "13a991a3-6d98-4749-9639-dd4687cce55e" --- # CUST-WP-0058 — Business Platform Enablement ## Goal Enable Binky Hedgehog GmbH commercial offerings on the coulomb/HelixForge platform by (a) resolving the three gating platform decisions, (b) codifying what every client-facing business application must provide, and (c) scoping the missing client/commercial management plane — so that **vergabe-teilnahme** (first business project) and the **coulomb.social rebuild** (second) land on a governed, extensible path rather than ad hoc wiring. This is a *coordination* workplan: implementation lands in the owning repos (`vergabe-teilnahme`, `fin-hub`, `ops-hub`, `core-hub`, railiance repos). The Custodian owns decisions, canon, and cross-repo sequencing per ADR-001. ## Background - Hub-ecosystem review 2026-07-09: architecture sound (hub-core / state-hub / core-hub compose-don't-merge, `CUST-WP-0057`); gaps are a missing client/commercial plane and three unrecorded decisions. - Decision framing: `docs/business-platform-decision-records.md` (DR-1 tenancy, DR-2 coulomb.social shape, DR-3 external identity). - fin-hub MVP (cost tracking, runway, RaaS pricing MVP) shipped via `FIN-WP-0000/0001`; **client-facing billing** remains open. - Delivery lane pattern proven for Core Hub (`docs/core-hub-helixforge-build-alignment.md`): commit-SHA images → `gitea.coulomb.social` registry → railiance-apps release values → evidence gates. ## Non-goals - Implementing vergabe-teilnahme features (owned by that repo) - Rebuilding coulomb.social (blocked on DR-2; owned by its future repo) - Building client-hub (this plan only *scopes* it; implementation gets its own workplan in the owning repo) - Payment execution / invoicing mechanics (fin-hub scope decision) ## Tasks ### T01 — Facilitate and record DR-1: tenancy model ```task id: CUST-WP-0058-T01 status: done priority: high state_hub_task_id: "b7130553-a3d9-4dfd-91d7-6edb503bab58" ``` **Resolved 2026-07-10: Option C (hybrid)** — instance-per-client to start, early cost-optimization move. Hub decision `d85cd185…`; doc updated with consistency Refinement 1 (consolidation-ready data model required by the service contract; consolidation is a DR-3 identity trigger). No vergabe-teilnahme SCOPE change needed for v1 (stays single-tenant deployed). ### T02 — Facilitate and record DR-2: coulomb.social architecture ```task id: CUST-WP-0058-T02 status: done priority: medium state_hub_task_id: "ec09753e-ecef-4368-af5d-5e295cdbda1e" ``` **Resolved 2026-07-10: Option B (standalone application)** — hub decision `1f8b109e…`. coulomb.social is its own app with a distinct ops model; Binky Hedgehog GmbH acts as client #1 of its own platform, consuming the same delivery lane and service contract as external-client apps. The bubble.io data-migration assessment and rebuild workplan skeletons are seeded in T08. ### T03 — Facilitate and record DR-3: external identity path ```task id: CUST-WP-0058-T03 status: done priority: high state_hub_task_id: "ffead70c-2179-46ba-a70a-cf13be87eef8" ``` **Resolved 2026-07-10: Option A (app-local accounts)** — hub decision `ebcf0573…`, demand-gated Keycloak follow-up. Refinement 2 replaces the "coulomb.social auto-trigger" with three demand triggers (client SSO/AD request; instance consolidation; local-account toil across >2 apps). NetKingdom lane notified 2026-07-10 (message `0d238b6e…`). Identity baseline for T04: app-local accounts, consolidation-ready. ### T04 — Author business-app service contract (canon standard) ```task id: CUST-WP-0058-T04 status: done priority: high state_hub_task_id: "a3cec70c-04a1-42a9-a6b0-3d2943b73968" ``` Draft `canon/standards/business-app-service-contract_v0.1.md` (proposal → human review, per canon gating): obligations every client-facing app must meet — build evidence (commit-SHA images, registry), backup/restore hooks into ops-hub, incident/runbook registration, cost attribution keys for fin-hub, **app-local identity baseline (DR-3 A)**, data-protection baseline, **instance-per-client provisioning/upgrade duties (DR-1 C)**, and **consolidation-ready data model** (Refinement 1: tenant-keyed data even when deployed single-tenant). Applies equally to client apps and Binky Hedgehog's own apps (coulomb.social — DR-2 B "client #1" model). vergabe-teilnahme is the reference implementation. Unblocked: DR-1/DR-3 resolved 2026-07-10. ### T05 — Scope client-hub (client/commercial plane) ```task id: CUST-WP-0058-T05 status: done priority: medium state_hub_task_id: "442b7f81-44c7-4301-9466-c99c240c4e49" ``` Write a scoping note (`docs/client-hub-scoping.md`) for the missing fourth management plane: client registry, contracts/entitlements, client↔instance mapping, support/SLA state. Default shape: **core-hub extension** (ops-hub pattern) reusing hub-core primitives — justify any deviation. Per DR-1 C the client↔instance model is 1..n instances per client, consolidation-aware; Binky Hedgehog GmbH itself is client #1 (DR-2 B). Output is a draft workplan skeleton for the owning repo, not implementation. Unblocked: DR-1 resolved. ### T06 — fin-hub client-billing gap assessment ```task id: CUST-WP-0058-T06 status: done priority: medium state_hub_task_id: "3a63f122-2398-4149-8458-eb5a3a54627c" ``` Review `FIN-WP-0000/0001` outcomes against what commercial clients need: per-client cost attribution, price-to-invoice data flow, and where the fin-hub "no payment execution / no multi-tenant billing" boundary should move (or which external system owns billing). Output: gap list + proposed FIN-WP workplan skeleton posted to the fin-hub lane. ### T07 — Delivery-lane pilot: vergabe-teilnahme end-to-end ```task id: CUST-WP-0058-T07 status: done priority: high state_hub_task_id: "d07443ab-76b1-4d66-981c-e83fcb915c0d" ``` Coordinate one full pass of the business delivery lane with a real (or pilot) client instance: vergabe-teilnahme build → immutable image in `gitea.coulomb.social` registry → railiance-apps release values → deployed instance → ops-hub evidence (endpoint, backup, smoke) → fin-hub cost attribution. **Done 2026-07-10 as a conformance snapshot** — the lane was already live (image `f95de14` at vergabe-teilnahme.whywhynot.de, 49d): build/registry/deploy/smoke PASS; four contract gaps found and handed to owners (tenant keying → vergabe-teilnahme; ops-hub registration → ops-hub; **cnpg backups missing on ALL four prod DB clusters** → railiance-apps, HIGH, message `a1957cce…`; cost attribution → fin-hub FIN-WP-0002). Evidence: `docs/evidence/vergabe-teilnahme-delivery-lane-20260710.json`. ### T08 — Closeout: decisions recorded, downstream workplans seeded ```task id: CUST-WP-0058-T08 status: done priority: low state_hub_task_id: "203f7afa-0162-4906-a4f2-c4789cd127bc" ``` **Done 2026-07-10.** DR-1/2/3 resolved; service contract accepted in canon. Handoffs delivered: fin-hub FIN-WP-0002 (msg `9c8e8ed4…`), core-hub CLNT-WP-0001 (msg `17f8c11b…`), vergabe-teilnahme gaps (msg `f49d2651…`), ops-hub registration (msg `f0374952…`), railiance-apps backup HIGH (msg `a1957cce…`), NetKingdom NK-WP-0011 triggers (msg `0d238b6e…`). coulomb.social rebuild seeded in `docs/coulomb-social-rebuild-seed.md` (no owning repo yet — created at project registration). SCOPE.md updated. ## Sequencing ```text [DR-1 ✓, DR-2 ✓, DR-3 ✓ — resolved 2026-07-10] T03 (NetKingdom trigger message) — small, immediate T04 (contract) ──> T07 (delivery-lane pilot) T05 (client-hub scope) — unblocked, parallel to T04 T06 (fin-hub gap) — independent, anytime T08 (closeout: seed coulomb.social rebuild + bubble.io migration skeletons) — last ``` ## References - `docs/business-platform-decision-records.md` — DR-1/2/3 framing - `docs/hub-ecosystem-architecture.md` — three-layer hub canon - `docs/core-hub-helixforge-build-alignment.md` — delivery lane pattern - `/home/worsch/vergabe-teilnahme/SCOPE.md` — first business app - `/home/worsch/fin-hub/workplans/` — FIN-WP-0000/0001 (finished)