Generated SaaS — aggregate roots¶
Generated from the architecture model
This page is rendered from model/**/*.yaml by tools/docs_model during mkdocs build. Edit the YAML, not this page; hand-written design lives on the linked service, platform and plane pages.
| Aggregate | Service | Root entity | Events | Tables |
|---|---|---|---|---|
| ProductTenant | GeneratedSaasFoundations | ProductTenant | ProductTenantProvisioned, ProductTenantStateChanged | ProductTenants |
| ProductSubscription | GeneratedSaasFoundations | ProductSubscription | ProductSubscriptionChanged, ProductUsageMetered | ProductSubscriptions, ProductUsage |
| ProductDescriptor | GeneratedProductHost | ProductDescriptor | ProductDescriptorPublished | ProductDescriptors |
| ManagedOperationsHandover | GeneratedProductHost | ManagedOperationsHandover | OperationsHandoverAcknowledged | OperationsHandovers |
ProductTenant (GeneratedSaasFoundations)¶
A customer tenant inside the generated product (SaaS Tenants template) with its mapping to the Factory's customer-tenant id used by fleet operations, its isolation mode, region and state.
| Field | Type | Required | Description |
|---|---|---|---|
productTenantId |
string |
yes | |
factoryTenantId |
string |
yes | The Factory tenant that owns the product. |
customerTenantId |
string |
yes | Opaque id the fleet uses; never carries customer identity. |
name |
string |
yes | |
isolationMode |
string |
yes | |
region |
string |
yes | |
state |
enum:ProductTenantState |
yes | |
createdAt |
datetime |
yes |
Invariants
- Identity and authorization of customer users live in the product (ADR-0101 through the Authorization Server); the Factory sees only the opaque customer-tenant id.
- A tenant's region satisfies the product owner's residency rule (D31).
States (ProductTenantState)
stateDiagram-v2
Provisioning --> Active : Provisioned
Active --> Suspended : SubscriptionLapsed
Suspended --> Active : Restored
Active --> Offboarding : OffboardingRequested
Offboarding --> Deleted : DeletionCompleted
ProductSubscription (GeneratedSaasFoundations)¶
The customer's subscription to an edition of the product (SaaS Billing and Entitlements templates): entitlements, seats, metering dimensions and state; for managed products the product's editions map to the owner's Factory subscription for fleet objectives, never for billing the customer (the product bills its own customers).
| Field | Type | Required | Description |
|---|---|---|---|
subscriptionId |
guid |
yes | |
productTenantId |
string |
yes | |
factoryTenantId |
string |
yes | |
edition |
string |
yes | |
entitlements |
json |
yes | |
seats |
int |
no | |
meteringDimensions |
list:string |
yes | |
state |
string |
yes | |
changedAt |
datetime |
yes |
Invariants
- Editions and entitlements come from the Agentic SaaS Product Blueprint and the ProductsCatalog template; the product never invents entitlements at run time.
ProductDescriptor (GeneratedProductHost)¶
What every generated product exposes about itself through its admin API: product and release identity, the generating blueprint and template versions (provenance), tenancy mode, editions in use, health endpoints, admin endpoints, and the objectives it commits to.
| Field | Type | Required | Description |
|---|---|---|---|
productId |
string |
yes | |
tenantId |
string |
yes | The Factory tenant that owns the product. |
releaseId |
guid |
yes | |
generatedBy |
json |
yes | blueprint versions, template versions, recipe version, agent releases |
tenancyMode |
enum:TenancyMode |
yes | |
operationsMode |
enum:OperationsMode |
yes | |
contexts |
list:string |
yes | Bounded contexts of the product. |
gatewayRef |
string |
yes | GW-07 endpoint. |
healthEndpoints |
json |
yes | |
adminEndpoints |
json |
yes | |
objectives |
json |
yes |
Invariants
- The descriptor is generated from the recipe and the product's own model; it is read by the fleet (through GW-07), never written by the Factory.
- Provenance names Published blueprint and template releases; a product cannot claim a release that was never Published.
ManagedOperationsHandover (GeneratedProductHost)¶
The record a product carries when ConnectSoft operates it (D33): the managed edition, objectives and response targets, runbook references, escalation contacts, maintenance windows, data-handover and off-boarding terms, and the acknowledgement of the product owner.
| Field | Type | Required | Description |
|---|---|---|---|
handoverId |
guid |
yes | |
tenantId |
string |
yes | |
productId |
string |
yes | |
managedEdition |
string |
yes | |
objectives |
json |
yes | |
runbookRefs |
list:string |
yes | |
contacts |
json |
yes | |
maintenanceWindows |
json |
no | |
offboardingTerms |
json |
yes | |
acknowledgedBy |
string |
no | |
acknowledgedAt |
datetime |
no |
Invariants
- A product is operated only after the owner acknowledged the handover; the fleet inventory onboards it from this record.
- Objectives never fall below the edition floor (D33).