---
id: ATS-CRM-ACT-006
scope: CAP-CRM-ACT-006
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-006-01
  title: Restrict revision access
  level: api
  proves:
  - BR-CAP-CRM-ACT-006-01
  preconditions: The caller has activity read but no history permission.
  steps: Request activity history.
  expected: The request returns Forbidden.
  negative: true
  data_needs: Each run creates and isolates the records it needs.
  bound_to:
  - 'services-crm:modules/activities/tests/e2e/activities.e2e.spec.js#refuses the history to a caller
    without crm.activities.history: 403'
  - react-console:components/activities/__tests__/activities-explorer-and-history.test.ts#refuses a reader
    who does not hold crm.activities.history, as CRM does
  - TST-CRM-ACT-002
  - TST-CRM-ACT-070
  provenance: test
  source: 'services-crm:modules/activities/tests/e2e/activities.e2e.spec.js#refuses the history to a caller
    without crm.activities.history: 403'
  category: permission
  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-006-02
  title: Record the full activity revision lifecycle
  level: api
  proves:
  - BR-CAP-CRM-ACT-006-02
  - BR-CAP-CRM-ACT-006-03
  preconditions: An activity can be created, corrected and deleted.
  steps: Create the activity, change its subject, delete it and read its history.
  expected: Creation, correction and deletion yield attributed revisions ordered newest first, still readable
    after deletion.
  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#writes
    one revision of record type crm.activities, attributed to the caller
  - services-crm:modules/activities/tests/integration/services/persistence/activities.integration.spec.js#writes
    an update revision naming the changed subject
  - services-crm:modules/activities/tests/integration/services/persistence/activities.integration.spec.js#writes
    a deletion revision
  - 'services-crm:modules/activities/tests/e2e/activities.e2e.spec.js#answers its history, newest first:
    the update and the create'
  - TST-CRM-ACT-007
  - TST-CRM-ACT-002
  provenance: test
  source: services-crm:modules/activities/tests/integration/services/persistence/activities.integration.spec.js#writes
    one revision of record type crm.activities, attributed to the caller
  category: invariant
  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-006-03
  title: Resolve historical entry labels from current records
  level: api
  proves:
  - BR-CAP-CRM-ACT-006-04
  preconditions: An activity links a contact renamed after creation.
  steps: Open the creation revision.
  expected: The revision separates its sections and labels the contact with its current name.
  negative: false
  data_needs: Each run creates and isolates the records it needs.
  bound_to:
  - services-crm:modules/activities/tests/e2e/activities.e2e.spec.js#shows the creation section by section,
    the linked records named as they are called
  - services-crm:modules/activities/tests/integration/services/history/activity-history.integration.spec.js#presents
    the creation’s outcome under “Outcome” by the name the type gives it
  - react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0702.spec.ts#CRM-ACC-0702
  - TST-CRM-ACT-002
  - TST-CRM-ACT-005
  - TST-CRM-ACT-046
  provenance: test
  source: services-crm:modules/activities/tests/e2e/activities.e2e.spec.js#shows the creation section
    by section, the linked records named as they are called
  category: rule
  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-006-04
  title: Corrected content is visible in an attributed revision
  category: interaction
  level: api
  proves:
  - BR-CAP-CRM-ACT-006-02
  - BR-CAP-CRM-ACT-006-04
  - BR-CAP-CRM-ACT-003-04
  preconditions: An interaction links two contacts.
  steps: Correct its subject and replace one link, then open that revision and the live entry.
  expected: The live entry reflects the correction and the revision identifies changed content and linked-record
    changes under the execution caller.
  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/services/persistence/activities.ts:recordedStampsOf; services-crm:modules/activities/tests/e2e/activities.e2e.spec.js#shows
    the creation section by section, the linked records named as they are called; services-crm:modules/activities/tests/integration/services/persistence/activities.integration.spec.js#replaces
    the links as a set on update, keeping the row of a record still linked
  exercises:
  - CAP-CRM-ACT-006
  - CAP-CRM-ACT-003
  related:
  - CAP-CRM-ACT-003
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: covered
  transition: 'gap: FND-CRM-ACT-052'
  validation: 'gap: FND-CRM-ACT-052'
  permission: covered
  edge: 'gap: FND-CRM-ACT-052'
  failure: 'gap: FND-CRM-ACT-052'
  boundary: 'gap: FND-CRM-ACT-052'
  concurrency: 'gap: FND-CRM-ACT-052'
  invariant: covered
  interaction: covered
coverage_obligations:
  finding: FND-CRM-ACT-052
  unproved_rules:
  - BR-CAP-CRM-ACT-006-05
  permission_matrix:
    keys:
    - crm.activities.read
    - crm.activities.history
    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: []
permission_coverage:
- key: crm.activities.read
  finding: FND-CRM-ACT-052
  note: The finding covers unproved operation and surface combinations; a permission-category scenario
    is not a complete permission matrix.
- key: crm.activities.history
  finding: FND-CRM-ACT-052
  note: The finding covers unproved operation and surface combinations; a permission-category scenario
    is not a complete permission matrix.
---

# Review activity changes and their attribution: 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-006-01` | `ATS-CRM-ACT-006-01` |
| `BR-CAP-CRM-ACT-006-02` | `ATS-CRM-ACT-006-02`, `ATS-CRM-ACT-006-04` |
| `BR-CAP-CRM-ACT-006-03` | `ATS-CRM-ACT-006-02` |
| `BR-CAP-CRM-ACT-006-04` | `ATS-CRM-ACT-006-03`, `ATS-CRM-ACT-006-04` |
| `BR-CAP-CRM-ACT-006-05` | `FND-CRM-ACT-052` |

## Interactions With Related Capabilities

An interaction links two contacts. Correct its subject and replace one link, then open that revision and the live entry.

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