---
id: CAP-PFM-TNL-009
title: Maintain the baseline of existing workspaces
feature: FEAT-PFM-TNL-03
product_area: platform
module: tenant-lifecycle
revision: 2
status: draft
product_intent: proposed
implementation_evidence: partially-observed
supersedes: []
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
intent_sources:
  - 'services-platform:docs/tenants/tenant-lifecycle-plan.md#§6.5'
  - 'services-platform:docs/standards/baseline-configuration.md#§3'
  - 'services-platform:docs/standards/baseline-configuration.md#§4'
purpose: >-
  Reconciliation supplies missing default configuration to older workspaces
  while preserving ledgered customer choices.
outcomes:
  - >-
    Deployment reconciliation adds missing CRM defaults without repeating
    existing seeds.
  - Staff can initialize a participant on demand.
  - Workspace failures are collected while reconciliation continues elsewhere.
concepts:
  - CON-PFM-TNL-003
actors:
  - ACT-PFM-004
  - ACT-PFM-012
surfaces:
  - api
  - job
preconditions: []
postconditions: []
permissions:
  - key: hq.tenants.provision
    where_checked: api
    scope: global
rules:
  - id: BR-CAP-PFM-TNL-009-01
    proved_by: [ATS-PFM-TNL-009-01]
    statement: >-
      Staff can initialize a participant for an existing workspace, applying
      unledgered defaults and selecting sets where the local implementation
      supports that selection.
    kind: policy
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/tenants/tests/integration/services/provisioning/initialize-tenant.integration.spec.js#runs
      the participant for the tenant and says what it did
    origin: 'services-platform:docs/tenants/tenant-lifecycle-plan.md#§6.5 (approved)'
  - id: BR-CAP-PFM-TNL-009-02
    proved_by: [ATS-PFM-TNL-009-02]
    statement: >-
      Staff initialization accepts active or provisioning-failed workspaces and
      rejects other lifecycle states, unknown participants and disabled
      participants.
    kind: validation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/tenants/tests/integration/services/provisioning/initialize-tenant.integration.spec.js#refuses
      a tenant whose deletion is pending
    origin: >-
      services-platform:docs/tenants/tenant-lifecycle-plan.md#§6.5 (approved);
      services-platform:docs/tenants/tenant-lifecycle-plan.md#§5.6 Provisioning
      and initialization refuse
  - id: BR-CAP-PFM-TNL-009-03
    proved_by: [ATS-PFM-TNL-009-03, TST-PFM-TNL-031]
    statement: >-
      CRM deployment reconciles defaults for active, loading and
      provisioning-failed workspaces regardless of business status.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/baseline-reconciliation.spec.js#runs
      the reconciliation on every update, which is every deployment
    origin: >-
      services-platform:docs/standards/baseline-configuration.md#§3 (D-48,
      Andrew 2026-10-19)
  - id: BR-CAP-PFM-TNL-009-04
    proved_by: [ATS-PFM-TNL-009-04, TST-PFM-TNL-023]
    statement: >-
      An uncustomized older CRM workspace receives the seeded types and ledger
      entries of a workspace provisioned with the current baseline.
    kind: invariant
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/tenant-lifecycle/tests/integration/services/lifecycle/baseline-reconciliation.integration.spec.js#leaves
      an old tenant with exactly the types a tenant provisioned today holds
    origin: 'services-platform:docs/standards/baseline-configuration.md#§4 (D-48)'
  - id: BR-CAP-PFM-TNL-009-05
    proved_by: [ATS-PFM-TNL-009-05, TST-PFM-TNL-031]
    statement: >-
      Reconciliation records a workspace’s failure, continues with others and
      then fails deployment with the collected errors.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/baseline-reconciliation.spec.js#fails
      the deployment when any tenant failed, naming the tenant and its message
    origin: >-
      services-platform:docs/standards/baseline-configuration.md#§3 Failure is
      visible (D-48)
  - id: BR-CAP-PFM-TNL-009-06
    proved_by: []
    statement: >-
      Platform currently applies its own defaults through provisioning or staff
      initialization, without a deployment reconciliation pass.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: documented
    source: >-
      services-platform:docs/standards/baseline-configuration.md#§5 Where each
      macroservice stands
    origin: 'services-platform:docs/standards/baseline-configuration.md#§5 (D-48)'
  - id: BR-CAP-PFM-TNL-009-07
    proved_by: [ATS-PFM-TNL-009-07, TST-PFM-TNL-080]
    statement: >-
      Existing-workspace provisioning retains the workspace’s status and applies
      missing work, rejecting workspaces outside active live or implementation
      mode.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/tenants/tests/integration/services/provisioning/provision-existing-tenant.integration.spec.js#leaves
      the tenant active at the status it had
    origin: none
  - id: BR-CAP-PFM-TNL-009-08
    proved_by: [ATS-PFM-TNL-009-08]
    statement: >-
      Remote initialization calls provisioning without passing the requested
      seed-set selection.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-platform:modules/tenants/services/provisioning/initialize-tenant.ts:runInitialize
    origin: none
scenarios:
  - id: SC-CAP-PFM-TNL-009-01
    given: CRM declares another follow-up task default.
    when: The release reconciles eligible workspaces.
    then: >-
      Each workspace lacking its seed receives it, and repeating reconciliation
      adds no second copy.
    provenance: test
    source: >-
      services-crm:modules/tenant-lifecycle/tests/integration/services/lifecycle/baseline-reconciliation.integration.spec.js#gives
      a tenant that predates the seeds the five task types, follow-up among them
edge_cases: []
constraints: []
depends_on:
  - CAP-PFM-TNL-008
related:
  - CAP-PFM-TNL-007
  - CAP-PFM-TNL-002
journeys:
  - JNY-PFM-TNL-005
open_questions:
  - OQ-PFM-TNL-002
evidence:
  - >-
    Inspected source:
    services-platform:docs/tenants/tenant-lifecycle-plan.md#§6.5
  - >-
    Inspected source:
    services-platform:docs/standards/baseline-configuration.md#§3
  - >-
    Inspected source:
    services-platform:docs/standards/baseline-configuration.md#§4
  - >-
    Inspected source:
    services-platform:modules/tenants/tests/integration/services/provisioning/initialize-tenant.integration.spec.js#runs
    the participant for the tenant and says what it did
  - >-
    Inspected source:
    services-platform:docs/tenants/tenant-lifecycle-plan.md#§6.5 (approved)
  - >-
    Inspected source:
    services-platform:modules/tenants/tests/integration/services/provisioning/initialize-tenant.integration.spec.js#refuses
    a tenant whose deletion is pending
  - >-
    Inspected source:
    services-platform:docs/tenants/tenant-lifecycle-plan.md#§6.5 (approved);
    services-platform:docs/tenants/tenant-lifecycle-plan.md#§5.6 Provisioning
    and initialization refuse
  - >-
    Inspected source:
    services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/baseline-reconciliation.spec.js#runs
    the reconciliation on every update, which is every deployment
  - >-
    Inspected source:
    services-platform:docs/standards/baseline-configuration.md#§3 (D-48, Andrew
    2026-10-19)
  - >-
    Inspected source:
    services-crm:modules/tenant-lifecycle/tests/integration/services/lifecycle/baseline-reconciliation.integration.spec.js#leaves
    an old tenant with exactly the types a tenant provisioned today holds
  - >-
    Inspected source:
    services-platform:docs/standards/baseline-configuration.md#§4 (D-48)
  - >-
    Inspected source:
    services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/baseline-reconciliation.spec.js#fails
    the deployment when any tenant failed, naming the tenant and its message
  - >-
    Inspected source:
    services-platform:docs/standards/baseline-configuration.md#§3 Failure is
    visible (D-48)
  - >-
    Inspected source:
    services-platform:docs/standards/baseline-configuration.md#§5 Where each
    macroservice stands
  - >-
    Inspected source:
    services-platform:docs/standards/baseline-configuration.md#§5 (D-48)
  - >-
    Inspected source:
    services-platform:modules/tenants/tests/integration/services/provisioning/provision-existing-tenant.integration.spec.js#leaves
    the tenant active at the status it had
  - >-
    Inspected source:
    services-platform:modules/tenants/services/provisioning/initialize-tenant.ts:runInitialize
  - >-
    Inspected source:
    services-crm:modules/tenant-lifecycle/tests/integration/services/lifecycle/baseline-reconciliation.integration.spec.js#gives
    a tenant that predates the seeds the five task types, follow-up among them
controls: [TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-005, TC-CHG-001, TC-CHG-002, TC-CHG-003, TC-CHG-004, TC-CHG-005, TC-CHG-006, TC-CHG-007, TC-DAT-004, TC-IAM-001, TC-IAM-003, TC-IAM-006, TC-LOG-001, TC-LOG-005, TC-MON-001, TC-PI-001, TC-PI-005, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-VEN-001, TC-VEN-002, TC-VEN-003]
exercised_by: [FAS-PFM-TNL-03-01, FAS-PFM-TNL-03-02, FAS-PFM-TNL-03-03]
suites: [TST-PFM-TNL-023, TST-PFM-TNL-031, TST-PFM-TNL-080]
---

# Maintain the baseline of existing workspaces

## Purpose

Reconciliation supplies missing default configuration to older workspaces while preserving ledgered customer choices.

## How It Works

An application can add a new default without requiring customers to recreate their workspaces. CRM’s deployment reconciliation selects its eligible lifecycle states and visits their participants. It applies the current seed sets through the same ledgers used in provisioning. Older uncustomized workspaces then have the current seeded configuration. A renamed or deleted ledgered default is still skipped. Errors are collected by workspace while the remaining workspaces are processed. The deployment fails after reporting those errors. Staff initialization provides a separate one-participant operation. Its allowed states differ from deployment reconciliation, and remote initialization uses provisioning without forwarding selected sets. Platform itself still lacks a deployment reconciliation pass for local defaults.

## Relationships

- Apply defaults without undoing customer choices: Its result establishes the state or declared resources needed by this operation.
- Account for each application’s lifecycle responsibilities: Its declarations identify the application resources involved.
- Open a workspace after its applications are ready: Its readiness and activation finish workspace construction.
