---
id: ATS-CRM-ACT-018
scope: CAP-CRM-ACT-018
product_area: crm
module: activities-tasks
revision: 3
status: proposed
approved_by: null
approved_at: null
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  rhythm-v2-docs: 18a49edf30ee6bda18b159b65a2b91e093ea713d
scenarios:
- id: ATS-CRM-ACT-018-01
  title: Retain shared activities after related-record removal
  level: api
  proves:
  - BR-CAP-CRM-ACT-018-01
  preconditions: One activity links two contacts.
  steps: Delete one contact.
  expected: The activity remains available from the other contact’s timeline.
  negative: false
  data_needs: Each run creates and isolates the records it needs.
  bound_to:
  - services-crm:modules/activities/tests/integration/services/persistence/activities.integration.spec.js#leaves
    the activity on the other records’ timelines when one linked contact is deleted
  - services-crm:modules/activities/tests/integration/db/activities.table.integration.spec.js#drops only
    its links when a linked contact is deleted, and leaves the activity
  - react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0719.spec.ts#CRM-ACC-0719
  - TST-CRM-ACT-007
  - TST-CRM-ACT-003
  - TST-CRM-ACT-063
  provenance: test
  source: services-crm:modules/activities/tests/integration/services/persistence/activities.integration.spec.js#leaves
    the activity on the other records’ timelines when one linked contact is deleted
  category: transition
  binding_scope: Each registered suite contributes the assertions named by the retained file bindings;
    a compound scenario can require several suites. Conformance remains unverified.
- id: ATS-CRM-ACT-018-02
  title: Inspect orphan retention and deletion audit evidence
  level: browser
  proves:
  - BR-CAP-CRM-ACT-018-02
  - BR-CAP-CRM-ACT-018-04
  preconditions: An activity has one contact link.
  steps: Delete the contact and inspect direct read, console landing and deletion revision.
  expected: The activity has no links, its landing cannot open it, and the journey records whether removed
    links are represented in the audit.
  negative: true
  data_needs: Each run creates and isolates the records it needs.
  bound_to:
  - react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0719.spec.ts#CRM-ACC-0719
  - TST-CRM-ACT-063
  provenance: test
  source: react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0719.spec.ts#CRM-ACC-0719
  category: edge
  binding_scope: Each registered suite contributes the assertions named by the retained file bindings;
    a compound scenario can require several suites. Conformance remains unverified.
- id: ATS-CRM-ACT-018-03
  title: Move and collapse references during merge
  level: browser
  proves:
  - BR-CAP-CRM-ACT-018-05
  - BR-CAP-CRM-ACT-018-07
  - BR-CAP-CRM-ACT-018-08
  preconditions: Contacts share a meeting and the duplicate also has independent activity and work.
  steps: Merge and inspect survivor and former-record reads.
  expected: Shared links collapse with primary preserved and tasks follow; the historical journey accepts
    Not Found or Gone for the old timeline.
  negative: false
  data_needs: Each run creates and isolates the records it needs.
  bound_to:
  - react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0720.spec.ts#CRM-ACC-0720
  - TST-CRM-ACT-064
  provenance: test
  source: react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0720.spec.ts#CRM-ACC-0720
  category: interaction
  binding_note: The binding proves transfer and deduplication, but not the precise Gone-and-survivor response.
  binding_scope: Each registered suite contributes the assertions named by the retained file bindings;
    a compound scenario can require several suites. Conformance remains unverified.
- id: ATS-CRM-ACT-018-04
  title: Record removal leaves surviving timeline and work context intact
  category: interaction
  level: api
  proves:
  - BR-CAP-CRM-ACT-018-01
  - BR-CAP-CRM-ACT-018-03
  - BR-CAP-CRM-ACT-005-05
  - BR-CAP-CRM-ACT-010-08
  preconditions: One interaction links two contacts and a task concerns the contact selected for removal.
  steps: Delete that contact and read the remaining contact timeline, activity and task.
  expected: The remaining timeline contains the shared interaction once; the task survives without the
    deleted contact reference.
  negative: false
  data_needs: Run-owned records in an isolated workspace; fixed clock for calendar checks.
  bound_to: []
  provenance: proposed
  source: 'services-crm:modules/activities/tests/integration/services/persistence/activities.integration.spec.js#leaves
    the activity on the other records’ timelines when one linked contact is deleted; react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0719.spec.ts#CRM-ACC-0719;
    services-crm:modules/activities/tests/integration/services/persistence/activities.queries.integration.spec.js#shows
    the activity linked to three contacts and an organization once on each of the four timelines; services-crm:modules/tasks/tests/integration/db/tasks.table.integration.spec.js#keeps
    the task: the work outlives the record it was about'
  exercises:
  - CAP-CRM-ACT-018
  - CAP-CRM-ACT-005
  - CAP-CRM-ACT-010
  related:
  - CAP-CRM-ACT-005
  - CAP-CRM-ACT-010
evidence:
- 'services-crm at a8d1364f1dd44b723bb5f9acba12f983e9ec8d69: scenario sources, executable assertions and
  local dependency boundaries are inspected.'
- 'react-console at baf6dae382d6f41dce976c7f848667ccc37e076f: scoped component tests and browser journey
  assertions are inspected.'
coverage:
  rule: 'gap: FND-CRM-ACT-064'
  transition: covered
  validation: 'gap: FND-CRM-ACT-064'
  permission: 'gap: FND-CRM-ACT-064'
  edge: covered
  failure: 'gap: FND-CRM-ACT-064'
  boundary: 'gap: FND-CRM-ACT-064'
  concurrency: 'gap: FND-CRM-ACT-064'
  invariant: 'gap: FND-CRM-ACT-064'
  interaction: covered
coverage_obligations:
  finding: FND-CRM-ACT-064
  unproved_rules:
  - BR-CAP-CRM-ACT-018-06
  permission_matrix:
    keys:
    - crm.contacts.merge
    - crm.organizations.merge
    - crm.contacts.delete
    remaining: Complete allow/refuse combinations, including each console guard and each API operation.
  execution_note: Covered means a scenario is specified; it does not mean that scenario has executed or
    every variant has an executable binding.
related_coverage:
- capability: CAP-CRM-ACT-005
  scenarios:
  - ATS-CRM-ACT-018-04
  finding: FND-CRM-ACT-064
permission_coverage:
- key: crm.contacts.merge
  finding: FND-CRM-ACT-064
  note: The finding covers unproved operation and surface combinations; a permission-category scenario
    is not a complete permission matrix.
- key: crm.organizations.merge
  finding: FND-CRM-ACT-064
  note: The finding covers unproved operation and surface combinations; a permission-category scenario
    is not a complete permission matrix.
- key: crm.contacts.delete
  finding: FND-CRM-ACT-064
  note: The finding covers unproved operation and surface combinations; a permission-category scenario
    is not a complete permission matrix.
---

# Retain interactions and work through record deletion and merge: Capability Test Specification

## Coverage

Category coverage counts specified proof. Unbound cases remain proposed; registered assertions do not establish a passing run.

| Rule | Proof Scenario Or Finding |
|---|---|
| `BR-CAP-CRM-ACT-018-01` | `ATS-CRM-ACT-018-01`, `ATS-CRM-ACT-018-04` |
| `BR-CAP-CRM-ACT-018-02` | `ATS-CRM-ACT-018-02` |
| `BR-CAP-CRM-ACT-018-03` | `ATS-CRM-ACT-018-04` |
| `BR-CAP-CRM-ACT-018-04` | `ATS-CRM-ACT-018-02` |
| `BR-CAP-CRM-ACT-018-05` | `ATS-CRM-ACT-018-03` |
| `BR-CAP-CRM-ACT-018-06` | `FND-CRM-ACT-064` |
| `BR-CAP-CRM-ACT-018-07` | `ATS-CRM-ACT-018-03` |
| `BR-CAP-CRM-ACT-018-08` | `ATS-CRM-ACT-018-03` |

## Interactions With Related Capabilities

One interaction links two contacts and a task concerns the contact selected for removal. Delete that contact and read the remaining contact timeline, activity and task.

The interaction scenario names the capabilities and rules it exercises. The coverage finding retains incomplete permission combinations and failure variants.
