the-custodian/docs/client-hub-scoping.md
codex e61c7ed15c
Some checks failed
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Has been cancelled
CUST-WP-0058: T04 approved, T05 client-hub scoping, T06 fin-hub gap done
Service contract v0.1 accepted (Bernd 2026-07-10). Client-hub scoped as
core-hub extension (client/engagement/app_instance/support_state, CLNT-WP
skeleton). fin-hub gap assessment: 5 gaps, FIN-WP-0002 skeleton posted to
fin-hub lane (msg 9c8e8ed4); recommendation fin-hub stays reporting-only.
Remaining: T07 delivery-lane pilot, T08 closeout.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 01:28:57 +02:00

83 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Client-Hub Scoping — the Client/Commercial Management Plane
**Created:** 2026-07-10
**Workplan:** `CUST-WP-0058-T05`
**Decisions applied:** DR-1 C (instance-per-client, consolidation-aware),
DR-2 B (Binky Hedgehog GmbH as client #1), DR-3 A (app-local identity)
**Contract:** `canon/standards/business-app-service-contract_v0.1.md` (§7)
## Why a fourth plane
The hub ecosystem manages dev (state-hub), ops (ops-hub), and fin (fin-hub)
concerns. Commercial operation of business apps adds concerns none of those
own: who the clients are, what they are entitled to, which instances serve
them, and what support/SLA state applies. Encoding any of this in the apps
themselves is prohibited by the service contract (§7.2).
## Shape decision: core-hub extension
**Client-hub is a Core Hub extension (ops-hub pattern), not a standalone
runtime.** Justification against the alternatives:
- *Standalone service*: adds an operational surface (deploy, backup, monitor)
for what is initially a small registry; contradicts the "don't spawn a
runtime per aspect" guard from the hub-ecosystem review.
- *fin-hub extension*: client identity is not a financial concern; billing
*references* clients but does not own them.
- *state-hub tables*: state-hub is the internal dev plane and must stay out
of anything client-related (dev plane never in the client dependency graph).
Core Hub is the production framework (`hub.coulomb.social`), already runs the
ops-hub extension, and hub-core primitives (domains/repos/messages/progress
router factories, JSON context seams) are available for reuse where they fit.
## Entity model (v1)
| Entity | Purpose | Key fields (sketch) |
| --- | --- | --- |
| `client` | Business client registry; **Binky Hedgehog GmbH is client #1** | name, legal form, contacts, status (prospect/active/offboarding/closed) |
| `engagement` | Contract/entitlement envelope per client×app | client_id, app slug, entitlements (JSON), contract refs (pointer, no documents), start/end |
| `app_instance` | Client↔instance mapping (1..n per client, DR-1) | client_id, engagement_id, app slug, environment ref (ops-hub), cost attribution key (fin-hub §5.1), consolidation state (dedicated/consolidated) |
| `support_state` | SLA/support posture per engagement | tier, contacts, escalation path, open-issue pointer (issue-core) |
Relations to other planes are **references, not ownership**: `app_instance`
points at ops-hub environment/service records and carries the fin-hub cost
key; documents/contracts stay in their own custody (no file storage here).
## Boundaries (out of scope)
- Payment, invoicing, dunning — fin-hub boundary question (T06)
- Contract document storage or legal authority — human/Binky Hedgehog custody
- Client *user* accounts — app-local per DR-3; client-hub tracks the client
organization, never its end users
- Task/issue lifecycle — issue-core owns; support_state only points
## Consolidation-awareness (DR-1 C)
`app_instance.consolidation_state` plus the tenant key make the early
cost-optimization move a data operation: consolidating N instances updates N
rows (dedicated→consolidated onto shared infra) without model changes.
Consolidation events must emit a signal that the DR-3 identity trigger can
observe.
## Proposed workplan skeleton (for `/home/worsch/core-hub` or a `client-hub` extension repo)
```
CLNT-WP-0001 — client-hub extension bootstrap
T01 Extension scaffold following ops-hub repo pattern (todo, high)
T02 client + engagement models, migrations, /api/v2 routes (todo, high)
T03 app_instance model with ops-hub env ref + fin-hub cost key (todo, high)
T04 support_state model + issue-core pointer (todo, medium)
T05 Seed client #1 (Binky Hedgehog GmbH) + vergabe-teilnahme pilot
engagement/instance rows (todo, medium)
T06 Operator console views (clients, engagements, instances) (todo, low)
```
Ownership question for Bernd at pickup: separate `client-hub` repo (like
`ops-hub`) or a module inside `core-hub`? Recommendation: **separate repo**,
consistent with the established extension pattern and repo-boundary rules.
## Pickup
Registered as an ecosystem todo when CUST-WP-0058-T08 closes; implementation
does not start inside the-custodian (repo-boundary).