---
id: TST-PFM-TNL-033
title: Crm lifecycle operation dispatch
kind: unit
product_area: platform
module: tenant-lifecycle
revision: 1
status: draft
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
repository: services-crm
files:
  - modules/tenant-lifecycle/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js
implements: []
environment: mock
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 1
isolation: Own in-process inputs and any installed dependency seams; restore process state after the file.
evidence:
  - 'services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js'
  - >-
    services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js imports
    ../../../services/lifecycle/tenant-lifecycle-operations
binding_scope: >-
  No complete ATS or FAS scenario implementation is claimed for this file. Partial assertions, if present,
  remain evidence rather than implements links.
partial_scenario_evidence:
  - scenario: ATS-PFM-TNL-007-01
    references:
      - >-
        services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#answers
        describe without reaching a tenant, so Platform can ask before a tenant exists
      - >-
        services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#refuses
        an operation that names no tenant
    provenance: test
    scope: partial assertions; no complete scenario implementation claimed
  - scenario: ATS-PFM-TNL-007-02
    references:
      - >-
        services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#refuses
        an operation it does not have
      - >-
        services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#refuses
        a participant CRM does not register
      - >-
        services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#refuses
        a provision that belongs to no run
      - >-
        services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#refuses
        a batch larger than the largest the batched delete accepts
    provenance: test
    scope: partial assertions; no complete scenario implementation claimed
  - scenario: ATS-PFM-TNL-007-06
    references:
      - >-
        services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#names
        reset among the operations of every participant it describes, which is how Platform knows it may reset
        the tenant
    provenance: test
    scope: partial assertions; no complete scenario implementation claimed
---
# Crm lifecycle operation dispatch

## Verification Boundary

The suite calls policy, mapping, manifest or dependency-injected code in process. Its assertions establish the named local behavior without a deployed API or a migrated cross-application workflow.

## What This Suite Proves

Lifecycle operation dispatch is the inspected subject. The inspected engineering checks remain available in the register. Some may contribute partial assertions to capability scenarios, but the file is not claimed to implement any complete scenario; the unbound inventory records that remaining mapping work.

## What It Does Not Prove

Source inspection supplies no passing run. The suite does not establish console behavior, deployment configuration, complete removal in every application or recovery from a provider failure beyond its declared seams. A local zero inventory covers declared and seeded resources only.

## Real Dependencies and Test Doubles

The source uses in-process policy and manifest inputs, and dependency seams where declared. Imported libraries are part of the exercised code; collaborator answers do not establish database enforcement or provider behavior.

## Must Not Be Doubled

Keep the policy, mapper, declaration or formatting function named by the source real; do not replace its return value with the expected answer. Any future database or API qualification must add the real boundary separately.
