---
id: FAS-PFM-DJE-03
feature: FEAT-PFM-DJE-03
product_area: platform
module: data-job-engine
revision: 1
status: proposed
product_intent: proposed
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  macroservice-libraries: 54536a441935c6e09fdb7f96f0bec71c52ba4e03
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
capabilities:
  - CAP-PFM-DJE-009
  - CAP-PFM-DJE-010
scenarios:
  - id: FAS-PFM-DJE-03-01
    title: A closed bulk dialog leaves a named job to inspect
    kind: behaviour
    exercises:
      - CAP-PFM-DJE-009
      - CAP-PFM-DJE-010
    relies_on:
      - ATS-PFM-DJE-009-01
      - ATS-PFM-DJE-009-08
      - ATS-PFM-DJE-010-04
    preconditions: Prepare contacts for a title change and contact types for deactivation.
    steps:
      - do: >-
          Apply both supported list jobs, close the dialogs and inspect their completion and
          refreshed lists.
        expect: >-
          The contacts receive the title and the deactivated types appear under Show Inactive; both
          jobs remain inspectable.
        provenance: proposed
        source: >-
          react-console:acceptance/data-jobs/playwright/journeys/dialogs/DJE-ACC-0100.spec.ts#DJE-ACC-0100;
          react-console:acceptance/data-jobs/playwright/journeys/dialogs/DJE-ACC-0113.spec.ts#DJE-ACC-0113;
          react-console:acceptance/data-jobs/playwright/journeys/dialogs/DJE-ACC-0107.spec.ts#DJE-ACC-0107
    expected: >-
      The contacts receive the title and the deactivated types appear under Show Inactive; both jobs
      remain inspectable.
    negative: false
    data_needs: Prepare contacts for a title change and contact types for deactivation.
    bound_to: []
    provenance: proposed
    source: >-
      react-console:acceptance/data-jobs/playwright/journeys/dialogs/DJE-ACC-0100.spec.ts#DJE-ACC-0100;
      react-console:acceptance/data-jobs/playwright/journeys/dialogs/DJE-ACC-0113.spec.ts#DJE-ACC-0113;
      react-console:acceptance/data-jobs/playwright/journeys/dialogs/DJE-ACC-0107.spec.ts#DJE-ACC-0107
  - id: FAS-PFM-DJE-03-02
    title: Moving records clears a catalogue deletion block
    kind: interaction
    exercises:
      - CAP-PFM-DJE-009
      - CAP-PFM-DJE-010
    relies_on:
      - ATS-PFM-DJE-010-01
      - ATS-PFM-DJE-010-03
      - ATS-PFM-DJE-009-01
    preconditions: Create an obsolete type used by three contacts and an unused replacement.
    steps:
      - do: >-
          Review the type's usage block, reclassify the contacts with a bulk job, then preview and
          approve deletion again.
        expect: >-
          The unused obsolete type disappears while the replacement and all three reclassified
          contacts remain.
        provenance: proposed
        source: >-
          services-crm:modules/data-jobs/tests/integration/services/jobs/configuration-data-jobs.integration.spec.js#answers
          the validation’s impact: ten it would delete and two it is blocked on;
          services-crm:modules/data-jobs/tests/integration/services/jobs/configuration-data-jobs.integration.spec.js#asks
          a person to type the number it would delete, not the number submitted;
          react-console:acceptance/data-jobs/playwright/journeys/dialogs/DJE-ACC-0100.spec.ts#DJE-ACC-0100
    expected: >-
      The unused obsolete type disappears while the replacement and all three reclassified contacts
      remain.
    negative: true
    data_needs: Create an obsolete type used by three contacts and an unused replacement.
    bound_to: []
    provenance: proposed
    source: >-
      services-crm:modules/data-jobs/tests/integration/services/jobs/configuration-data-jobs.integration.spec.js#answers
      the validation’s impact: ten it would delete and two it is blocked on;
      services-crm:modules/data-jobs/tests/integration/services/jobs/configuration-data-jobs.integration.spec.js#asks
      a person to type the number it would delete, not the number submitted;
      react-console:acceptance/data-jobs/playwright/journeys/dialogs/DJE-ACC-0100.spec.ts#DJE-ACC-0100
  - id: FAS-PFM-DJE-03-03
    title: A status job protects edits made after its preview
    kind: lifecycle
    exercises:
      - CAP-PFM-DJE-009
      - CAP-PFM-DJE-010
    relies_on:
      - ATS-PFM-DJE-010-04
    preconditions: Preview deactivation of two active contact types.
    steps:
      - do: 'Change one type after preview, approve the saved job and refresh the list.'
        expect: The unchanged type becomes inactive and the intervening change remains as a conflict.
        provenance: proposed
        source: >-
          react-console:acceptance/data-jobs/playwright/journeys/dialogs/DJE-ACC-0107.spec.ts#DJE-ACC-0107
    expected: The unchanged type becomes inactive and the intervening change remains as a conflict.
    negative: true
    data_needs: Preview deactivation of two active contact types.
    bound_to: []
    provenance: proposed
    source: >-
      react-console:acceptance/data-jobs/playwright/journeys/dialogs/DJE-ACC-0107.spec.ts#DJE-ACC-0107
  - id: FAS-PFM-DJE-03-04
    title: Visible bulk access does not grant the missing action key
    kind: permission
    exercises:
      - CAP-PFM-DJE-009
      - CAP-PFM-DJE-010
    relies_on:
      - ATS-PFM-DJE-009-09
      - ATS-PFM-DJE-010-06
    preconditions: Use a caller with catalogue bulk authority but no delete authority.
    steps:
      - do: >-
          Inspect the offered action and attempt its backend submission; read records as an
          authorized owner.
        expect: >-
          The service refuses removal and preserves the catalogue; any offered action is recorded as
          a visibility defect.
        provenance: proposed
        source: >-
          react-console:acceptance/data-jobs/playwright/journeys/dialogs/DJE-ACC-0108.spec.ts#DJE-ACC-0108;
          react-console:acceptance/data-jobs/playwright/journeys/dialogs/DJE-ACC-0109.spec.ts#DJE-ACC-0109
    expected: >-
      The service refuses removal and preserves the catalogue; any offered action is recorded as a
      visibility defect.
    negative: true
    data_needs: Use a caller with catalogue bulk authority but no delete authority.
    bound_to: []
    provenance: proposed
    source: >-
      react-console:acceptance/data-jobs/playwright/journeys/dialogs/DJE-ACC-0108.spec.ts#DJE-ACC-0108;
      react-console:acceptance/data-jobs/playwright/journeys/dialogs/DJE-ACC-0109.spec.ts#DJE-ACC-0109
  - id: FAS-PFM-DJE-03-05
    title: Oversized selection routes updates and refuses dialog deletion
    kind: regression
    exercises:
      - CAP-PFM-DJE-009
      - CAP-PFM-DJE-010
    relies_on:
      - ATS-PFM-DJE-009-02
      - ATS-PFM-DJE-010-01
    preconditions: Select 501 contacts and separately select a used catalogue type.
    steps:
      - do: >-
          Inspect update and delete choices for the contact selection, then inspect the catalogue
          deletion preview.
        expect: >-
          The oversized update transfers to the wizard, oversized dialog deletion explains its
          limit, and catalogue usage remains a separate block.
        provenance: proposed
        source: >-
          react-console:acceptance/data-jobs/playwright/journeys/dialogs/DJE-ACC-0110.spec.ts#DJE-ACC-0110;
          services-crm:modules/data-jobs/tests/integration/services/jobs/configuration-data-jobs.integration.spec.js#answers
          the validation’s impact: ten it would delete and two it is blocked on
    expected: >-
      The oversized update transfers to the wizard, oversized dialog deletion explains its limit,
      and catalogue usage remains a separate block.
    negative: true
    data_needs: Select 501 contacts and separately select a used catalogue type.
    bound_to: []
    provenance: proposed
    source: >-
      react-console:acceptance/data-jobs/playwright/journeys/dialogs/DJE-ACC-0110.spec.ts#DJE-ACC-0110;
      services-crm:modules/data-jobs/tests/integration/services/jobs/configuration-data-jobs.integration.spec.js#answers
      the validation’s impact: ten it would delete and two it is blocked on
evidence:
  - CAP-PFM-DJE-009
  - CAP-PFM-DJE-010
  - specs/CONVENTIONS.md#5.3 Feature Acceptance Suite
  - specs/CONVENTIONS.md#9.10 Capability Test Specification
---

# Bulk dialogs on record lists: Feature Acceptance Suite

## What the Feature Must Do as a Whole

A closed bulk dialog leaves a named job to inspect is the feature-level acceptance outcome. The suite follows the work through its participating capabilities and checks the final records, job accounts and refusals together. Permission and regression cases revisit the same feature boundary with changed authority or input.

## Interactions Between Capabilities

Moving records clears a catalogue deletion block. The interaction case changes a shared prerequisite and checks how that change affects the next capability's result. Lifecycle cases retain partial work and distinguish a new attempt from resuming existing work. These feature expectations remain proposed until their complete executable coverage is established.

## Regression Record

| Revision | Change | Scenario | Why |
|---|---|---|---|
| 1 | initial | all | Establish cumulative acceptance across the feature's landed capabilities. |
