Scott Holdings LLC
Design preview
GS
Build SaaS products GoClaw CRM Provisioning

Provisioning & deployment

Durable stage history from control-plane registration through runtime bootstrap.

Stages

Eight durable stages; domain and container work are optional gates.

App registration06:13:50

SaaSAppId, SaasAppIdInt, domain, routing, storage and usage meters registered.

Physical databases06:29:38

Core cloned from the golden CustomerCopy; logging and AI databases created.

Database identity06:29:38

SaasAppIdentityMap stamped and sp_AssertDatabaseIdentity passed.

Tenant root & bridges06:37:51

AppAccount, tenant owner, full data role, log bridge and AI bridge created.

Activate app06:37:51

Control-plane status moved Provisioning → Active after tenant verification.

Create app shell06:58:00

Builder settings, theme, top bar, menus and blank Home page created.

Publish first page07:20:14

core.text draft published as Home page version 2; edit lock released.

Runtime contract07:25:36

sp_Runtime_GetPageBootstrap returned metadata, shell, components and page.

Recent log

TimeStageMessage
07:25:36Runtime contractFour-result-set runtime bootstrap verified.
07:20:14Publish first pageHome page version 2 published with core.text.
06:58:00Create app shellBlank shell and Home page created.
06:37:51Activate appTenant root and database bridges verified; app activated.
06:29:38Physical databasesCore, logging and AI databases online; identity stamped.
Safe messages only — raw provider errors never render.Durable keyset-paged history
About this page

Shows the durable worker lifecycle rather than a browser-run wizard. Each successful stage writes an idempotent provisioning record. Activation follows tenant-root and bridge verification; custom domains and containers remain independent optional work for BuilderOnly products.

If a stage fails you’ll see a plain-language message, never a raw system error — and a retry when retrying can help.

Behind this page/apps/:saasAppId/provisioning · CanDeploy

Retrieve

sp_Builder_GetAppAdminDetail returns app/routing state; provisioning history must use stable keyset pagination over SaaSAppProvisioningLogId. Show the durable stage code, safe message, timestamp, and retry eligibility.

Save

Retry queues only the failed retryable worker stage with an idempotency key. The browser never creates databases, restores backups, stamps identity, creates tenant roles, or reruns tripwire procedures directly.

Success

  • Active is allowed with primary domain Pending.
  • BuilderOnly is allowed with container NotStarted.
  • Partial database creation blocks automation and requires operator-safe recovery.
  • Worker logs expose safe messages and correlation IDs, not provider secrets.

CLI handoff

Implement this scaffold from the structured contract, then remove hard-coded preview rows. The source of truth is CLI Handoff and admin-cli-manifest.json.

Page IDsaas-product-provisioning
Route/apps/:saasAppId/provisioning
AccessCanDeploy
Statusworker-integration-required

Server-inject identity and scope values; never trust browser-supplied account, app, tenant, user, entitlement, price, or permission identifiers. Preserve the loading, empty, forbidden, failed, retrying, and completed states shown by the preview.