---
id: SVC-PFM-TNL-commerce-tenant-lifecycle
title: Commerce Lifecycle Participant
product_area: platform
module: tenant-lifecycle
repository: services-commerce
source_module: modules/tenant-lifecycle
revision: 1
status: draft
design_intent: confirmed
origin: services-platform:docs/tenants/tenant-lifecycle-plan.md#§6.1 Registration (approved 2026-10-09); services-platform:docs/data-jobs/tenant-reset.md#§3
  The contract for a macroservice that holds a tenant's records
implementation_evidence: observed
inference: []
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
owns: []
does_not_own:
- Platform’s orchestration plan, integration switch and recorded workflow accounting.
- System-owned workspace lifecycle facts.
- Business record ownership, which remains with the application’s domain modules.
operations:
- operation_id: describe
  route: lifecycle function commerce_tenant_lifecycle operation describe
  intent: Return participant declarations and the operations the application supports.
  access: internal
  permission: 'none: invoked by Platform''s lifecycle jobs through an IAM invoke grant; no person calls it'
  realises:
  - CAP-PFM-TNL-007
  published_to_submissions: 'not published: internal lifecycle or deployment work is not configurable intake.'
  provenance: observed
  source: services-commerce:modules/tenant-lifecycle/services/lifecycle/tenant-lifecycle-operations.ts:TENANT_LIFECYCLE_OPERATIONS
- operation_id: provision
  route: lifecycle function commerce_tenant_lifecycle operation provision
  intent: Create or adopt built-in audiences and placements without ledgering their application.
  access: internal
  permission: 'none: invoked by Platform''s lifecycle jobs through an IAM invoke grant; no person calls it'
  realises:
  - CAP-PFM-TNL-002
  - CAP-PFM-TNL-008
  published_to_submissions: 'not published: internal lifecycle or deployment work is not configurable intake.'
  provenance: observed
  source: services-commerce:modules/tenant-lifecycle/services/lifecycle/tenant-lifecycle-operations.ts:TENANT_LIFECYCLE_OPERATIONS
- operation_id: verifyProvisioned
  route: lifecycle function commerce_tenant_lifecycle operation verifyProvisioned
  intent: Report readiness and the requirements the selected participant finds missing.
  access: internal
  permission: 'none: invoked by Platform''s lifecycle jobs through an IAM invoke grant; no person calls it'
  realises:
  - CAP-PFM-TNL-002
  - CAP-PFM-TNL-008
  published_to_submissions: 'not published: internal lifecycle or deployment work is not configurable intake.'
  provenance: observed
  source: services-commerce:modules/tenant-lifecycle/services/lifecycle/tenant-lifecycle-operations.ts:TENANT_LIFECYCLE_OPERATIONS
- operation_id: purge
  route: lifecycle function commerce_tenant_lifecycle operation purge
  intent: Remove a bounded batch of declared participant resources and return progress.
  access: internal
  permission: 'none: invoked by Platform''s lifecycle jobs through an IAM invoke grant; no person calls it'
  realises:
  - CAP-PFM-TNL-017
  published_to_submissions: 'not published: internal lifecycle or deployment work is not configurable intake.'
  provenance: observed
  source: services-commerce:modules/tenant-lifecycle/services/lifecycle/tenant-lifecycle-operations.ts:TENANT_LIFECYCLE_OPERATIONS
- operation_id: inventory
  route: lifecycle function commerce_tenant_lifecycle operation inventory
  intent: Count the selected participant’s remaining declared resources.
  access: internal
  permission: 'none: invoked by Platform''s lifecycle jobs through an IAM invoke grant; no person calls it'
  realises:
  - CAP-PFM-TNL-017
  published_to_submissions: 'not published: internal lifecycle or deployment work is not configurable intake.'
  provenance: observed
  source: services-commerce:modules/tenant-lifecycle/services/lifecycle/tenant-lifecycle-operations.ts:TENANT_LIFECYCLE_OPERATIONS
- operation_id: export
  route: lifecycle function commerce_tenant_lifecycle operation export
  intent: Write the next batch of a declared export dataset and return its part and continuation.
  access: internal
  permission: 'none: invoked by Platform''s lifecycle jobs through an IAM invoke grant; no person calls it'
  realises:
  - CAP-PFM-TNL-010
  published_to_submissions: 'not published: internal lifecycle or deployment work is not configurable intake.'
  provenance: observed
  source: services-commerce:modules/tenant-lifecycle/services/lifecycle/tenant-lifecycle-operations.ts:TENANT_LIFECYCLE_OPERATIONS
events: []
jobs:
- name: commerce_tenant_lifecycle
  kind: Lambda function, reserved concurrency 1, four-minute timeout
  trigger: Invoked by the declared lifecycle caller or deployment hook; enablement and recovery limits are stated
    below.
  notes: Reset is unsupported and Platform preserves Commerce during initial-load reset.
integrations:
- system: Platform workspace lifecycle jobs
  direction: inbound
  contract: A synchronous invocation selects the operation and participant and supplies workspace, run and batching
    context as required by that operation.
- system: Workspace export bucket
  direction: outbound
  contract: Export writes a staged dataset part and returns metadata for the coordinator.
consistency:
- rule: A removal batch commits within its workspace before the invocation returns.
  kind: transactional
  compensation: Retry continues removal; completed batches are retained.
- rule: Repeated removal works toward empty declared resources; provisioning repeats follow participant-specific
    behavior.
  kind: eventual
  compensation: Recovery retries forward without undoing earlier batches.
- rule: Repeated provisioning adopts existing built-in audiences and placements but recreates removed defaults.
  kind: transactional
  compensation: No rollback is provided.
evidence:
- 'services-commerce at c8b66a98: modules/tenant-lifecycle/services/lifecycle/{tenant-lifecycle-operations, tenant-availability}.ts;
  services/participants/{orders-participant, registry, export-classifications, purge-batches}.ts; services/persistence/*.ts;
  services/exports/*.ts; aws/logic/tenant-lifecycle.lambda.ts.'
controls: [TC-AVL-001, TC-AVL-004, TC-AVL-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-005, TC-AZ-006, TC-CHG-001, TC-CHG-002, TC-CHG-003, TC-CHG-004, TC-CHG-005, TC-CHG-006, TC-CHG-007, TC-CRY-001, TC-CRY-002, TC-CRY-003, TC-CRY-004, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-DAT-004, TC-DAT-005, TC-DAT-006, TC-IAM-001, TC-IAM-002, TC-IAM-003, TC-IAM-004, TC-IAM-005, TC-IAM-006, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-MON-001, TC-MON-003, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-SEC-001, TC-SEC-002, TC-SEC-003, TC-SEC-004, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---

# Commerce Lifecycle Participant

## What This Service Is For

Commerce supplies pricing audiences and store placements during construction, removes declared order-domain resources during deletion and exports its declared datasets.

## Boundary

Commerce retains ownership of order-domain records and participant implementation. Platform selects the plan and drives its calls. Reset keeps Commerce because its lifecycle interface declares no reset operation. The registered availability implementation reads workspace facts and evaluates its local gate.

## Operations in Words

The single participant reports its declarations, creates or adopts two pricing audiences and five placements, and reports any missing starter record. Removal follows table dependencies in batches, with inventory used to count the remaining declared resources. Export writes one dataset batch and returns continuation information. Provisioning adopts existing defaults but records no seed ledger.

## Events and Jobs

The lifecycle interface declares no business events. Platform invokes the function synchronously; its reserved concurrency is one and its timeout is four minutes. Commerce has no reset operation.

## Consistency Guarantees

Removal batches commit before Platform records their results. Repeating removal works toward empty resources, but a lost response can omit counts from Platform’s totals. Adoption avoids duplicate defaults; it recreates a removed default on a later provisioning call.
