---
id: ATS-ACC-BKS-019
scope: CAP-ACC-BKS-019
product_area: accounting
module: books
revision: 2
status: proposed
approved_by: null
approved_at: null
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-ACC-BKS-019-01
    title: Provision initial methods idempotently
    level: api
    proves:
      - BR-CAP-ACC-BKS-019-01
    preconditions: The workspace is newly created.
    steps: 'Provision twice, verify and call reconciliation provisioning.'
    expected: >-
      Five methods appear once, readiness is verified and reconciliation has no
      initial data to create.
    negative: false
    data_needs: The setup needs no extra fixture records.
    bound_to:
      - TST-ACC-BKS-183
      - TST-ACC-BKS-093
    provenance: test
    source: >-
      services-accounting:modules/maintenance/tests/integration/services/participants/configuration-participant.integration.spec.js#answers
      provision done, having written the tenant’s five system payment methods
      (WP-01)
    category: transition
    binding_evidence:
      - >-
        services-accounting:modules/maintenance/tests/integration/services/participants/configuration-participant.integration.spec.js#answers
        provision done, having written the tenant’s five system payment methods
        (WP-01)
      - >-
        services-accounting:modules/maintenance/tests/integration/services/participants/configuration-participant.integration.spec.js#answers
        verifyProvisioned ready once the system payment methods are there
      - >-
        services-accounting:modules/books/tests/integration/services/persistence/payment-methods.integration.spec.js#writes
        the five system methods once: a retry writes nothing
      - >-
        services-accounting:modules/books/tests/integration/services/persistence/payment-methods.integration.spec.js#keeps
        a method the tenant renamed
  - id: ATS-ACC-BKS-019-02
    title: Purge resumably in dependency order
    level: api
    proves:
      - BR-CAP-ACC-BKS-019-02
    preconditions: Two workspaces have seeded declared tables.
    steps: Purge one in single-record batches and interrupt processing.
    expected: >-
      Dependencies are removed first, prior progress survives and the declared
      data reaches empty.
    negative: false
    data_needs: The setup needs no extra fixture records.
    bound_to:
      - TST-ACC-BKS-183
      - TST-ACC-BKS-180
    provenance: test
    source: >-
      services-accounting:modules/maintenance/tests/integration/services/participants/configuration-participant.integration.spec.js#empties
      the tables child first, the business unit taking its currencies with it
    category: transition
    binding_evidence:
      - >-
        services-accounting:modules/maintenance/tests/integration/services/participants/configuration-participant.integration.spec.js#empties
        the tables child first, the business unit taking its currencies with it
      - >-
        services-accounting:modules/maintenance/tests/integration/services/participants/configuration-participant.integration.spec.js#resumes
        to done when it is called again
      - >-
        services-accounting:modules/maintenance/tests/integration/db/purge-order.integration.spec.js#plans
        the reconciliation, then billing and the transactions with fiscal close,
        then the configuration
  - id: ATS-ACC-BKS-019-03
    title: Refuse ineligible purge targets
    level: api
    proves:
      - BR-CAP-ACC-BKS-019-03
    preconditions: 'Targets are active, unknown or have cancelled deletion.'
    steps: Call purge for each.
    expected: The request fails without removing records.
    negative: true
    data_needs: The setup needs no extra fixture records.
    bound_to:
      - TST-ACC-BKS-183
    provenance: test
    source: >-
      services-accounting:modules/maintenance/tests/integration/services/participants/configuration-participant.integration.spec.js#refuses
      a tenant that is not being deleted
    category: validation
    binding_evidence:
      - >-
        services-accounting:modules/maintenance/tests/integration/services/participants/configuration-participant.integration.spec.js#refuses
        a tenant that is not being deleted
      - >-
        services-accounting:modules/maintenance/tests/integration/services/participants/configuration-participant.integration.spec.js#removes
        nothing from a tenant it refused
      - >-
        services-accounting:modules/maintenance/tests/integration/services/participants/configuration-participant.integration.spec.js#refuses
        a tenant whose deletion was cancelled part way through
  - id: ATS-ACC-BKS-019-04
    title: Verify purge completeness and confinement
    level: api
    proves:
      - BR-CAP-ACC-BKS-019-04
      - BR-CAP-ACC-BKS-019-05
      - INV-DOM-ACC-BKS-006-07
    preconditions: Two workspaces are populated and the migrated schema is available.
    steps: Purge one and compare participant declarations with schema ownership.
    expected: >-
      The other stays unchanged, each workspace table has one owner and shared
      vocabularies stay outside purge.
    negative: false
    data_needs: The setup needs no extra fixture records.
    bound_to:
      - TST-ACC-BKS-183
      - TST-ACC-BKS-178
    provenance: test
    source: >-
      services-accounting:modules/maintenance/tests/integration/services/participants/configuration-participant.integration.spec.js#leaves
      the other tenant’s rows exactly as they were, table for table
    category: invariant
    binding_evidence:
      - >-
        services-accounting:modules/maintenance/tests/integration/services/participants/configuration-participant.integration.spec.js#leaves
        the other tenant’s rows exactly as they were, table for table
      - >-
        services-accounting:modules/maintenance/tests/integration/db/declaration-completeness.integration.spec.js#leaves
        no tenant-keyed table undeclared
      - >-
        services-accounting:modules/maintenance/tests/integration/db/declaration-completeness.integration.spec.js#lets
        no two participants claim the same table
      - >-
        services-accounting:modules/maintenance/tests/integration/db/declaration-completeness.integration.spec.js#declares
        none of the global vocabularies, which hold no tenant’s rows
  - id: ATS-ACC-BKS-019-05
    title: Export customer data with secret guards
    level: api
    proves:
      - BR-CAP-ACC-BKS-019-06
      - INV-DOM-ACC-BKS-006-08
    preconditions: >-
      Two populated workspaces include a secret-shaped value in one exportable
      record.
    steps: Walk the chosen workspace’s declared datasets.
    expected: >-
      Eligible records appear once with workspace identity, foreign data and
      credentials are excluded, and the detected-secret batch is blocked before
      staging.
    negative: true
    data_needs: The setup needs no extra fixture records.
    bound_to:
      - TST-ACC-BKS-181
    provenance: test
    source: >-
      services-accounting:modules/maintenance/tests/integration/services/exports/seed-everything.integration.spec.js#exports
      every seeded row of an exported resource exactly once
    category: failure
    binding_evidence:
      - >-
        services-accounting:modules/maintenance/tests/integration/services/exports/seed-everything.integration.spec.js#exports
        every seeded row of an exported resource exactly once
      - >-
        services-accounting:modules/maintenance/tests/integration/services/exports/seed-everything.integration.spec.js#carries
        no value of the second tenant anywhere in the package
      - >-
        services-accounting:modules/maintenance/tests/integration/services/exports/seed-everything.integration.spec.js#exports
        a merchant account’s processor account id and never the connection that
        holds its credentials
      - >-
        services-accounting:modules/maintenance/tests/integration/services/exports/seed-everything.integration.spec.js#stops
        a batch whose record carries a Stripe secret’s shape, blocked with
        nothing staged
      - >-
        services-accounting:modules/maintenance/tests/integration/services/exports/seed-everything.integration.spec.js#leaves
        out a record created after the cut-off, by its recorded instant
  - id: ATS-ACC-BKS-019-06
    title: Apply availability exceptions
    level: unit
    proves:
      - BR-CAP-ACC-BKS-019-07
      - INV-DOM-ACC-BKS-006-09
    preconditions: Lifecycle and enabled-status combinations are available.
    steps: Evaluate ordinary and data-job routes for users and staff.
    expected: >-
      Ordinary access requires active enablement; loading data jobs and deleting
      staff reads follow their exceptions, with bounded state caching.
    negative: true
    data_needs: The setup needs no extra fixture records.
    bound_to:
      - TST-ACC-BKS-194
    provenance: test
    source: >-
      services-accounting:modules/maintenance/tests/unit/lifecycle/tenant-availability.spec.js#serves
      only an active tenant that is not disabled, and refuses every other
      combination
    category: permission
    binding_evidence:
      - >-
        services-accounting:modules/maintenance/tests/unit/lifecycle/tenant-availability.spec.js#serves
        only an active tenant that is not disabled, and refuses every other
        combination
      - >-
        services-accounting:modules/maintenance/tests/unit/lifecycle/tenant-availability.spec.js#serves
        a loading tenant whatever its status, and answers every other state as
        it does an ordinary route
      - >-
        services-accounting:modules/maintenance/tests/unit/lifecycle/tenant-availability.spec.js#serves
        every state but the one being deleted, which it may only read
      - >-
        services-accounting:modules/maintenance/tests/unit/lifecycle/tenant-availability.spec.js#reads
        it again once the thirty seconds are up
  - id: ATS-ACC-BKS-019-07
    title: Reject malformed lifecycle input
    level: unit
    proves:
      - BR-CAP-ACC-BKS-019-08
    preconditions: No participant work has begun.
    steps: >-
      Send reset, unknown operation, missing workspace/run and zero or excessive
      batch sizes.
    expected: Each request is rejected before processing.
    negative: true
    data_needs: The setup needs no extra fixture records.
    bound_to:
      - TST-ACC-BKS-195
    provenance: test
    source: >-
      services-accounting:modules/maintenance/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#refuses
      a reset, which Accounting does not serve
    category: boundary
    binding_evidence:
      - >-
        services-accounting:modules/maintenance/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#refuses
        a reset, which Accounting does not serve
      - >-
        services-accounting:modules/maintenance/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#refuses
        an operation it does not have
      - >-
        services-accounting:modules/maintenance/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#refuses
        an operation that names no tenant
      - >-
        services-accounting:modules/maintenance/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#refuses
        a batch larger than the largest the batched delete accepts
  - id: ATS-ACC-BKS-019-08
    title: Explain export exclusions and dispatch refusals
    level: api
    proves:
      - BR-CAP-ACC-BKS-019-09
    preconditions: >-
      Cases include undeclared data, excluded history and empty datasets with or
      without financial history.
    steps: Export the cases and request an empty-dataset continuation.
    expected: >-
      Undeclared data is blocked, excluded history carries a completed empty
      part and warning, and only an eligible first empty request is not
      applicable.
    negative: true
    data_needs: Isolated fixture records matching this scenario’s setup.
    bound_to: []
    provenance: proposed
    source: >-
      services-accounting:modules/maintenance/services/exports/dataset-exports.ts:exportParticipantDataset
    category: rule
    binding_evidence: []
  - id: ATS-ACC-BKS-019-09
    title: Erasure preserves another workspace configuration
    category: interaction
    level: api
    proves:
      - BR-CAP-ACC-BKS-019-04
      - BR-CAP-ACC-BKS-016-04
    preconditions: >-
      Run-owned records satisfy the preconditions of the referenced capability
      proofs.
    steps: >-
      Seed identical configuration identities in two workspaces, erase one in
      bounded batches and read both under their own principals.
    expected: >-
      The selected data disappears and the other workspace retains its
      independent records.
    negative: false
    data_needs: >-
      Run-owned records for the stated setup; retain the initial values for
      comparison.
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-accounting:modules/maintenance/tests/integration/services/participants/configuration-participant.integration.spec.js#leaves
        the other tenant’s rows exactly as they were, table for table
      - >-
        services-accounting:modules/books/tests/e2e/configuration-security.e2e.spec.js#answers
        404 in tenant B to a read of tenant A’s business unit
    exercises:
      - CAP-ACC-BKS-019
      - CAP-ACC-BKS-016
    workflows: []
    binding_evidence: []
evidence:
  - >-
    Verified source file:
    services-accounting:modules/books/tests/integration/services/persistence/payment-methods.integration.spec.js
  - >-
    Verified source file:
    services-accounting:modules/maintenance/services/exports/dataset-exports.ts
  - >-
    Verified source file:
    services-accounting:modules/maintenance/tests/integration/db/declaration-completeness.integration.spec.js
  - >-
    Verified source file:
    services-accounting:modules/maintenance/tests/integration/db/purge-order.integration.spec.js
  - >-
    Verified source file:
    services-accounting:modules/maintenance/tests/integration/services/exports/seed-everything.integration.spec.js
  - >-
    Verified source file:
    services-accounting:modules/maintenance/tests/integration/services/participants/configuration-participant.integration.spec.js
  - >-
    Verified source file:
    services-accounting:modules/maintenance/tests/unit/lifecycle/tenant-availability.spec.js
  - >-
    Verified source file:
    services-accounting:modules/maintenance/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js
product_intent: proposed
state_transition_coverage:
  - state_model: STATE-ACC-BKS-005
    from: unknown
    to: provisioning
    trigger: Observe Platform provisioning
    provenance: unknown
    source: FND-ACC-BKS-052
    scenarios: []
    gap: FND-ACC-BKS-080
  - state_model: STATE-ACC-BKS-005
    from: provisioning
    to: loading
    trigger: Observe Platform loading
    provenance: unknown
    source: FND-ACC-BKS-052
    scenarios: []
    gap: FND-ACC-BKS-080
  - state_model: STATE-ACC-BKS-005
    from: provisioning
    to: active
    trigger: Observe Platform activation after provisioning
    provenance: unknown
    source: FND-ACC-BKS-052
    scenarios: []
    gap: FND-ACC-BKS-080
  - state_model: STATE-ACC-BKS-005
    from: loading
    to: active
    trigger: Observe Platform activation after loading
    provenance: unknown
    source: FND-ACC-BKS-052
    scenarios: []
    gap: FND-ACC-BKS-080
  - state_model: STATE-ACC-BKS-005
    from: active
    to: disabled
    trigger: Observe disabled status
    provenance: unknown
    source: FND-ACC-BKS-052
    scenarios: []
    gap: FND-ACC-BKS-080
  - state_model: STATE-ACC-BKS-005
    from: disabled
    to: active
    trigger: Observe re-enabled status
    provenance: unknown
    source: FND-ACC-BKS-052
    scenarios: []
    gap: FND-ACC-BKS-080
  - state_model: STATE-ACC-BKS-005
    from: active
    to: deleting
    trigger: Observe deletion standing
    provenance: unknown
    source: FND-ACC-BKS-052
    scenarios: []
    gap: FND-ACC-BKS-080
  - state_model: STATE-ACC-BKS-005
    from: deleting
    to: active
    trigger: Observe a changed state after deletion
    provenance: unknown
    source: FND-ACC-BKS-052
    scenarios: []
    gap: FND-ACC-BKS-080
  - state_model: STATE-ACC-BKS-005
    from: deleting
    to: unknown
    trigger: Observe removal of the Platform row
    provenance: unknown
    source: FND-ACC-BKS-052
    scenarios: []
    gap: FND-ACC-BKS-080
coverage:
  rule: covered
  transition: covered
  validation: covered
  permission: covered
  edge: 'gap: FND-ACC-BKS-080'
  failure: covered
  boundary: covered
  concurrency: 'gap: FND-ACC-BKS-080'
  invariant: covered
  interaction: covered
coverage_notes:
  rule:
    scenarios:
      - ATS-ACC-BKS-019-08
    provenance: documented
    source:
      - ATS-ACC-BKS-019-08
  transition:
    scenarios:
      - ATS-ACC-BKS-019-01
      - ATS-ACC-BKS-019-02
    provenance: documented
    source:
      - ATS-ACC-BKS-019-01
      - ATS-ACC-BKS-019-02
  validation:
    scenarios:
      - ATS-ACC-BKS-019-03
    provenance: documented
    source:
      - ATS-ACC-BKS-019-03
  permission:
    scenarios:
      - ATS-ACC-BKS-019-06
    provenance: documented
    source:
      - ATS-ACC-BKS-019-06
  edge:
    scenarios: []
    provenance: unknown
    source: FND-ACC-BKS-080
    reason: >-
      No scenario isolates this category for the capability at the pinned
      revision.
    gap: FND-ACC-BKS-080
  failure:
    scenarios:
      - ATS-ACC-BKS-019-05
    provenance: documented
    source:
      - ATS-ACC-BKS-019-05
  boundary:
    scenarios:
      - ATS-ACC-BKS-019-07
    provenance: documented
    source:
      - ATS-ACC-BKS-019-07
  concurrency:
    scenarios: []
    provenance: unknown
    source: FND-ACC-BKS-080
    reason: >-
      No scenario isolates this category for the capability at the pinned
      revision.
    gap: FND-ACC-BKS-080
  invariant:
    scenarios:
      - ATS-ACC-BKS-019-04
    provenance: documented
    source:
      - ATS-ACC-BKS-019-04
  interaction:
    scenarios:
      - ATS-ACC-BKS-019-09
    provenance: documented
    source:
      - ATS-ACC-BKS-019-09
rule_coverage:
  - rule: BR-CAP-ACC-BKS-019-01
    scenarios:
      - ATS-ACC-BKS-019-01
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/tests/integration/services/participants/configuration-participant.integration.spec.js#answers
      provision done, having written the tenant’s five system payment methods
      (WP-01)
  - rule: BR-CAP-ACC-BKS-019-02
    scenarios:
      - ATS-ACC-BKS-019-02
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/tests/integration/services/participants/configuration-participant.integration.spec.js#resumes
      to done when it is called again
  - rule: BR-CAP-ACC-BKS-019-03
    scenarios:
      - ATS-ACC-BKS-019-03
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/tests/integration/services/participants/configuration-participant.integration.spec.js#refuses
      a tenant that is not being deleted
  - rule: BR-CAP-ACC-BKS-019-04
    scenarios:
      - ATS-ACC-BKS-019-04
      - ATS-ACC-BKS-019-09
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/tests/integration/services/participants/configuration-participant.integration.spec.js#leaves
      the other tenant’s rows exactly as they were, table for table
  - rule: BR-CAP-ACC-BKS-019-05
    scenarios:
      - ATS-ACC-BKS-019-04
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/tests/integration/db/declaration-completeness.integration.spec.js#leaves
      no tenant-keyed table undeclared
  - rule: BR-CAP-ACC-BKS-019-06
    scenarios:
      - ATS-ACC-BKS-019-05
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/tests/integration/services/exports/seed-everything.integration.spec.js#stops
      a batch whose record carries a Stripe secret’s shape, blocked with nothing
      staged
  - rule: BR-CAP-ACC-BKS-019-07
    scenarios:
      - ATS-ACC-BKS-019-06
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/tests/unit/lifecycle/tenant-availability.spec.js#serves
      only an active tenant that is not disabled, and refuses every other
      combination
  - rule: BR-CAP-ACC-BKS-019-08
    scenarios:
      - ATS-ACC-BKS-019-07
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#refuses
      a reset, which Accounting does not serve
  - rule: BR-CAP-ACC-BKS-019-09
    scenarios:
      - ATS-ACC-BKS-019-08
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/services/exports/dataset-exports.ts:exportParticipantDataset
related_coverage:
  - capability: CAP-ACC-BKS-016
    scenarios:
      - ATS-ACC-BKS-019-09
    provenance: documented
    source: >-
      specs/accounting/books/planning/capabilities/CAP-ACC-BKS-019-provision-serve-export-and-erase-a-workspaces-accounting.md
workflow_coverage:
  - workflow: WF-ACC-BKS-009
    interactions: []
    provenance: documented
    source: >-
      specs/accounting/books/design/workflows/WF-ACC-BKS-009-provision-accounting-for-a-new-workspace.md
    gap: FND-ACC-BKS-080
  - workflow: WF-ACC-BKS-010
    interactions: []
    provenance: documented
    source: >-
      specs/accounting/books/design/workflows/WF-ACC-BKS-010-erase-a-workspaces-accounting-data.md
    gap: FND-ACC-BKS-080
  - workflow: WF-ACC-BKS-011
    interactions: []
    provenance: documented
    source: >-
      specs/accounting/books/design/workflows/WF-ACC-BKS-011-export-a-workspaces-accounting-datasets.md
    gap: FND-ACC-BKS-080
coverage_interpretation: >-
  Covered means a specified scenario exists. Proposed scenarios and registered
  bindings do not establish a passed run or verified conformance.
invariant_coverage:
  - invariant: INV-DOM-ACC-BKS-006-01
    scenarios:
      - ATS-ACC-BKS-012-01
      - ATS-ACC-BKS-012-02
    provenance: documented
    source: >-
      services-accounting:modules/books/tests/integration/services/persistence/payment-methods.integration.spec.js#refuses
      to be deactivated, 409 payment_method_system
  - invariant: INV-DOM-ACC-BKS-006-02
    scenarios:
      - ATS-ACC-BKS-012-03
      - ATS-ACC-BKS-012-04
    provenance: documented
    source: >-
      services-accounting:modules/books/tests/integration/services/persistence/payment-methods.integration.spec.js#refuses
      an offline method offered in the portal, naming the rule
  - invariant: INV-DOM-ACC-BKS-006-03
    scenarios:
      - ATS-ACC-BKS-011-03
      - ATS-ACC-BKS-013-06
    provenance: documented
    source: >-
      services-accounting:modules/books/tests/integration/services/persistence/tax-classes.integration.spec.js#translates
      the refusal of each restrict foreign key to a tax class into a 409 naming
      it, the invoice lines among them
  - invariant: INV-DOM-ACC-BKS-006-04
    scenarios:
      - ATS-ACC-BKS-017-01
    provenance: documented
    source: >-
      services-accounting:modules/books/db/settings.table.ts:settings_template_references_trigger
  - invariant: INV-DOM-ACC-BKS-006-05
    scenarios:
      - ATS-ACC-BKS-018-10
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/db/schedules.table.ts;
      services-accounting:modules/maintenance/aws/lambda/CONSUMER.ts:handler;
      services-accounting:package-lock.json
  - invariant: INV-DOM-ACC-BKS-006-06
    scenarios:
      - ATS-ACC-BKS-018-05
      - ATS-ACC-BKS-018-07
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/tests/integration/services/scheduling/schedules-end-to-end.integration.spec.js#pauses
      the schedule after the fifth failure in a row
  - invariant: INV-DOM-ACC-BKS-006-07
    scenarios:
      - ATS-ACC-BKS-019-04
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/tests/integration/db/declaration-completeness.integration.spec.js#leaves
      no tenant-keyed table undeclared
  - invariant: INV-DOM-ACC-BKS-006-08
    scenarios:
      - ATS-ACC-BKS-019-05
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/tests/integration/services/exports/seed-everything.integration.spec.js#stops
      a batch whose record carries a Stripe secret’s shape, blocked with nothing
      staged
  - invariant: INV-DOM-ACC-BKS-006-09
    scenarios:
      - ATS-ACC-BKS-019-06
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/tests/unit/lifecycle/tenant-availability.spec.js#serves
      only an active tenant that is not disabled, and refuses every other
      combination
permission_coverage:
  - key: accounting.application.access
    where_checked: api
    scenarios:
      - ATS-ACC-BKS-019-06
    provenance: documented
    source: >-
      specs/accounting/books/planning/capabilities/CAP-ACC-BKS-019-provision-serve-export-and-erase-a-workspaces-accounting.md
reviewed_at: '2026-10-23'
---

# Manage Accounting data through workspace lifecycle jobs: Capability Test Specification

## Coverage

- Provision initial methods idempotently.
- Purge resumably in dependency order.
- Refuse ineligible purge targets.
- Verify purge completeness and confinement.
- Verify purge completeness and confinement.
- Export customer data with secret guards.
- Apply availability exceptions.
- Reject malformed lifecycle input.
- Explain export exclusions and dispatch refusals.

The structured coverage map distinguishes specified examples from remaining findings. Proposed examples require executable proof before qualification.

## Interactions With Related Capabilities

- Erasure preserves another workspace configuration.

Related-capability and workflow references identify the seams each scenario exercises. The lifecycle coverage record retains transitions that still need individual proof.

## Binding Review

The pinned service and browser assertions support the registered bindings. Original test references remain beside each scenario so partial evidence and unresolved conformance remain reviewable.
