Skip to content

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
Hold "Alt" / "Option" to enable pan & zoom

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).