---
id: ATS-PFM-DJE-017
scope: CAP-PFM-DJE-017
product_area: platform
module: data-job-engine
revision: 2
status: proposed
approved_by: null
approved_at: null
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
scenarios:
  - id: ATS-PFM-DJE-017-01
    title: Reset eligibility and confirmation are required
    level: api
    proves:
      - BR-CAP-PFM-DJE-017-01
    preconditions: 'Prepare live, non-loading and loading workspaces.'
    steps:
      - do: Request resets and use incorrect confirmation for the loading workspace.
        expect: >-
          The proposed refusal checks expect no removal from ineligible or incorrectly confirmed
          requests.
        provenance: proposed
        source: >-
          react-console:acceptance/crm/playwright/journeys/data-operations/CRM-ACC-0674.spec.ts#CRM-ACC-0674
    expected: >-
      The proposed refusal checks expect no removal from ineligible or incorrectly confirmed
      requests.
    negative: true
    data_needs: Workspaces in distinct lifecycle contexts.
    bound_to: []
    provenance: proposed
    source: >-
      react-console:acceptance/crm/playwright/journeys/data-operations/CRM-ACC-0674.spec.ts#CRM-ACC-0674
    category: validation
    binding_evidence:
      - >-
        react-console:acceptance/crm/playwright/journeys/data-operations/CRM-ACC-0674.spec.ts#CRM-ACC-0674
  - id: ATS-PFM-DJE-017-02
    title: CRM reset removes loaded participant data
    level: api
    proves:
      - BR-CAP-PFM-DJE-017-02
    preconditions: Load the migration fixture into a workspace.
    steps:
      - do: Reset its participants.
        expect: >-
          The cited fixtures report participant completion and removal of loaded CRM records, types
          and keys.
        provenance: test
        source: >-
          services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#answers
          done from every participant of the reset
    expected: >-
      The cited fixtures report participant completion and removal of loaded CRM records, types and
      keys.
    negative: false
    data_needs: A loaded package fixture.
    bound_to:
      - TST-PFM-DJE-122
    provenance: test
    source: >-
      services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#answers
      done from every participant of the reset
    category: rule
    binding_evidence:
      - >-
        services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#answers
        done from every participant of the reset
      - >-
        services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#removes
        everything the load wrote: no contact, organization, imported type or crosswalk row is left
  - id: ATS-PFM-DJE-017-03
    title: Unsupported participants prevent removal
    level: api
    proves:
      - BR-CAP-PFM-DJE-017-03
    preconditions: Configure a participant without reset support.
    steps:
      - do: Request reset.
        expect: The service is named in a refusal before any participant is emptied.
        provenance: proposed
        source: 'services-platform:docs/data-jobs/tenant-reset.md#3.1 Declaring support'
    expected: The service is named in a refusal before any participant is emptied.
    negative: true
    data_needs: A participant declaration fixture.
    bound_to: []
    provenance: proposed
    source: 'services-platform:docs/data-jobs/tenant-reset.md#3.1 Declaring support'
    category: validation
    binding_evidence: []
  - id: ATS-PFM-DJE-017-04
    title: Reload reproduces the fixture after reset
    level: api
    proves:
      - BR-CAP-PFM-DJE-017-04
    preconditions: Load the same package into two workspaces.
    steps:
      - do: Reset and reload one workspace.
        expect: The other retains its checksum and the reloaded records and numbers match the prior load.
        provenance: test
        source: >-
          services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#leaves
          every row of the other loading tenant as it was, by a checksum of each table
    expected: The other retains its checksum and the reloaded records and numbers match the prior load.
    negative: false
    data_needs: A migration package.
    bound_to:
      - TST-PFM-DJE-122
    provenance: test
    source: >-
      services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#leaves
      every row of the other loading tenant as it was, by a checksum of each table
    category: invariant
    binding_evidence:
      - >-
        services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#leaves
        every row of the other loading tenant as it was, by a checksum of each table
      - >-
        services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#reloads
        as many rows, table for table, as the load before the reset
      - >-
        services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#reloads
        the same records as the load before the reset, numbers included
  - id: ATS-PFM-DJE-017-05
    title: Loading permission does not grant activation
    level: api
    proves:
      - BR-CAP-PFM-DJE-017-06
    preconditions: Use a staff caller with loading access but without activation access.
    steps:
      - do: Request activation.
        expect: The proposed API proof expects refusal.
        provenance: proposed
        source: 'services-platform:docs/data-jobs/data-runs.md#7. The summary and the readiness verdict'
    expected: The proposed API proof expects refusal.
    negative: true
    data_needs: Permission personas.
    bound_to: []
    provenance: proposed
    source: 'services-platform:docs/data-jobs/data-runs.md#7. The summary and the readiness verdict'
    category: permission
    binding_evidence: []
  - id: ATS-PFM-DJE-017-06
    title: The planned readiness gate prevents early activation
    level: api
    proves:
      - BR-CAP-PFM-DJE-017-07
    preconditions: Prepare a load with unresolved refusals.
    steps:
      - do: 'Attempt activation, resolve the blockers and attempt again.'
        expect: >-
          The proposed gate refuses the first request with blockers and permits release after
          resolution.
        provenance: proposed
        source: 'services-platform:docs/milestones/plans/PLAT-M22-plan.md#A3'
    expected: >-
      The proposed gate refuses the first request with blockers and permits release after
      resolution.
    negative: true
    data_needs: A package containing invalid input.
    bound_to: []
    provenance: proposed
    source: 'services-platform:docs/milestones/plans/PLAT-M22-plan.md#A3'
    category: rule
    binding_evidence: []
  - id: ATS-PFM-DJE-017-07
    title: Loading restricts ordinary routes
    level: api
    proves:
      - BR-CAP-PFM-DJE-017-08
    preconditions: Prepare a loading workspace.
    steps:
      - do: Call an ordinary route and an allowed data-job route.
        expect: The ordinary request is unavailable and the allowed job request is served.
        provenance: proposed
        source: >-
          react-console:acceptance/crm/playwright/journeys/data-operations/CRM-ACC-0673.spec.ts#CRM-ACC-0673
    expected: The ordinary request is unavailable and the allowed job request is served.
    negative: true
    data_needs: A loading workspace.
    bound_to: []
    provenance: proposed
    source: >-
      react-console:acceptance/crm/playwright/journeys/data-operations/CRM-ACC-0673.spec.ts#CRM-ACC-0673
    category: boundary
    binding_evidence:
      - >-
        react-console:acceptance/crm/playwright/journeys/data-operations/CRM-ACC-0673.spec.ts#CRM-ACC-0673
  - id: ATS-PFM-DJE-017-08
    title: Reset removes loaded mappings before reconciliation and reload
    category: interaction
    level: api
    exercises:
      - CAP-PFM-DJE-015
      - CAP-PFM-DJE-017
    proves:
      - BR-CAP-PFM-DJE-015-02
      - BR-CAP-PFM-DJE-015-05
      - BR-CAP-PFM-DJE-017-02
      - BR-CAP-PFM-DJE-017-04
    preconditions: Load the same package in two isolated loading workspaces.
    steps:
      - do: >-
          Reset one, reconcile its keys, reload it, and compare both workspaces with their prior
          projections.
        expect: >-
          Reset keys become missing until reload; the other workspace remains unchanged and the
          reset fixture reproduces its records and numbers.
        provenance: proposed
        source: >-
          services-crm:modules/data-jobs/services/jobs/records-by-source-key.ts:readRecordsBySourceKey;
          services-platform:modules/data-jobs/services/jobs/records-by-source-key.ts:readCustomFieldsBySourceKey;
          services-crm:modules/data-jobs/tests/integration/services/jobs/records-by-source-key.integration.spec.js#looks
          a key up under its own object type only: a contact key is not an organization;
          services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#removes
          everything the load wrote: no contact, organization, imported type or crosswalk row is
          left;
          services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#reloads
          the same records as the load before the reset, numbers included
    expected: >-
      Reset keys become missing until reload; the other workspace remains unchanged and the reset
      fixture reproduces its records and numbers.
    negative: true
    data_needs: Load the same package in two isolated loading workspaces.
    bound_to: []
    provenance: proposed
    source: >-
      services-crm:modules/data-jobs/services/jobs/records-by-source-key.ts:readRecordsBySourceKey;
      services-platform:modules/data-jobs/services/jobs/records-by-source-key.ts:readCustomFieldsBySourceKey;
      services-crm:modules/data-jobs/tests/integration/services/jobs/records-by-source-key.integration.spec.js#looks
      a key up under its own object type only: a contact key is not an organization;
      services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#removes
      everything the load wrote: no contact, organization, imported type or crosswalk row is left;
      services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#reloads
      the same records as the load before the reset, numbers included
  - id: ATS-PFM-DJE-017-09
    title: Failed loading remains available for reset and a fresh run
    category: interaction
    level: api
    exercises:
      - CAP-PFM-DJE-016
      - CAP-PFM-DJE-017
    proves:
      - BR-CAP-PFM-DJE-016-09
      - BR-CAP-PFM-DJE-016-10
      - BR-CAP-PFM-DJE-017-02
      - BR-CAP-PFM-DJE-017-04
      - BR-CAP-PFM-DJE-017-05
    preconditions: Start a package with a dataset that fails after earlier work committed.
    steps:
      - do: 'Inspect the failed run, reset the loading workspace, register corrected input and reload.'
        expect: >-
          Earlier commits remain until reset; a new registration drives the corrected load without
          reopening the failed run.
        provenance: proposed
        source: >-
          services-platform:modules/data-jobs/tests/integration/services/runs/run-driver.integration.spec.js#cancels
          the jobs a cancelled run had already submitted, in their own services;
          services-platform:modules/data-jobs/tests/unit/run-summary.spec.ts#is not ready when a
          dataset’s counts do not add up to what the producer claimed;
          services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#removes
          everything the load wrote: no contact, organization, imported type or crosswalk row is
          left;
          services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#reloads
          the same records as the load before the reset, numbers included;
          services-platform:docs/data-jobs/tenant-reset.md#1. When a tenant may be reset
    expected: >-
      Earlier commits remain until reset; a new registration drives the corrected load without
      reopening the failed run.
    negative: true
    data_needs: Start a package with a dataset that fails after earlier work committed.
    bound_to: []
    provenance: proposed
    source: >-
      services-platform:modules/data-jobs/tests/integration/services/runs/run-driver.integration.spec.js#cancels
      the jobs a cancelled run had already submitted, in their own services;
      services-platform:modules/data-jobs/tests/unit/run-summary.spec.ts#is not ready when a
      dataset’s counts do not add up to what the producer claimed;
      services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#removes
      everything the load wrote: no contact, organization, imported type or crosswalk row is left;
      services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#reloads
      the same records as the load before the reset, numbers included;
      services-platform:docs/data-jobs/tenant-reset.md#1. When a tenant may be reset
  - id: ATS-PFM-DJE-017-10
    title: Reset keeps input available while deletion removes it
    category: interaction
    level: api
    exercises:
      - CAP-PFM-DJE-011
      - CAP-PFM-DJE-017
    proves:
      - BR-CAP-PFM-DJE-011-11
      - BR-CAP-PFM-DJE-017-02
      - BR-CAP-PFM-DJE-017-04
    preconditions: Prepare completed uploads and loaded records in a loading workspace.
    steps:
      - do: >-
          Reset the workspace, inspect retained uploads, reload from them, then invoke workspace
          deletion on a separate disposable fixture.
        expect: >-
          Reset retains input for another load; deletion removes its upload records and stored
          versions.
        provenance: proposed
        source: >-
          services-platform:docs/data-jobs/uploads.md#Deletion;
          services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#removes
          everything the load wrote: no contact, organization, imported type or crosswalk row is
          left;
          services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#reloads
          the same records as the load before the reset, numbers included
    expected: Reset retains input for another load; deletion removes its upload records and stored versions.
    negative: false
    data_needs: Prepare completed uploads and loaded records in a loading workspace.
    bound_to: []
    provenance: proposed
    source: >-
      services-platform:docs/data-jobs/uploads.md#Deletion;
      services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#removes
      everything the load wrote: no contact, organization, imported type or crosswalk row is left;
      services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#reloads
      the same records as the load before the reset, numbers included
evidence:
  - >-
    Reviewed evidence: services-platform (ad3f6a65): docs/data-jobs/tenant-reset.md, data-runs.md
    §7; modules/data-jobs/services/maintenance/tenant-participant.ts,
    data-operations-participant.ts; services/persistence/tenant-purges.ts; the reset, loading and
    activation routes in modules/tenants (named as a dependency only); docs/milestones/PLAT-M22
    record and plan.
  - >-
    Reviewed evidence: services-crm (a8d1364f): docs/data-jobs.md (Reset); tests
    initial-import-guarantees.integration.spec.js.
  - >-
    Testing back-fill: related capability rules, domain invariants, state transitions and crossing
    workflows at the pinned source revisions.
coverage:
  rule: covered
  transition: 'gap: FND-PFM-DJE-077'
  validation: covered
  permission: covered
  edge: 'gap: FND-PFM-DJE-077'
  failure: 'gap: FND-PFM-DJE-077'
  boundary: covered
  concurrency: 'gap: FND-PFM-DJE-077'
  invariant: covered
  interaction: covered
coverage_notes:
  transition: >-
    Selected lifecycle examples do not cover every applicable object and batch transition. The
    linked finding retains the remaining matrix.
  execution: >-
    Covered means a specification scenario exists. Proposed scenarios and registered suites with no
    run result do not establish executed conformance.
related:
  - CAP-PFM-DJE-016
  - CAP-PFM-DJE-015
workflows:
  - WF-PFM-DJE-014
coverage_evidence:
  - rule: BR-CAP-PFM-DJE-017-01
    scenarios:
      - ATS-PFM-DJE-017-01
    provenance: proposed
    source: 'services-platform:docs/data-jobs/tenant-reset.md#1. When a tenant may be reset'
  - rule: BR-CAP-PFM-DJE-017-02
    scenarios:
      - ATS-PFM-DJE-017-02
      - ATS-PFM-DJE-017-08
      - ATS-PFM-DJE-017-09
      - ATS-PFM-DJE-017-10
    provenance: proposed
    source: >-
      services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#removes
      everything the load wrote: no contact, organization, imported type or crosswalk row is left
  - rule: BR-CAP-PFM-DJE-017-03
    scenarios:
      - ATS-PFM-DJE-017-03
    provenance: proposed
    source: 'services-platform:docs/data-jobs/tenant-reset.md#3.1 Declaring support'
  - rule: BR-CAP-PFM-DJE-017-04
    scenarios:
      - ATS-PFM-DJE-017-04
      - ATS-PFM-DJE-017-08
      - ATS-PFM-DJE-017-09
      - ATS-PFM-DJE-017-10
    provenance: proposed
    source: >-
      services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#reloads
      the same records as the load before the reset, numbers included
  - rule: BR-CAP-PFM-DJE-017-06
    scenarios:
      - ATS-PFM-DJE-017-05
    provenance: proposed
    source: 'services-platform:docs/data-jobs/data-runs.md#7. The summary and the readiness verdict'
  - rule: BR-CAP-PFM-DJE-017-07
    scenarios:
      - ATS-PFM-DJE-017-06
    provenance: proposed
    source: 'services-platform:docs/milestones/plans/PLAT-M22-plan.md#A3'
  - rule: BR-CAP-PFM-DJE-017-08
    scenarios:
      - ATS-PFM-DJE-017-07
    provenance: proposed
    source: 'services-platform:docs/data-jobs/platform-data-operations.md#Reading a load back by source key'
---

# Reset a loading workspace and review its release: Capability Test Specification

## Coverage

The structured coverage rows link required rules to their scenarios. A covered category has a defined check; executable coverage and successful execution require separate evidence. The category map keeps incomplete lifecycle matrices and other missing checks visible as findings.

## Interactions With Related Capabilities

Reset removes loaded mappings before reconciliation and reload. Failed loading remains available for reset and a fresh run. Reset keeps input available while deletion removes it. The interaction scenarios use the related capabilities' rule references and identify the shared fixture and observable outcome.
