---
id: ATS-CRM-ACT-002
scope: CAP-CRM-ACT-002
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-002-01
  title: Require task creation authority for follow-up
  level: api
  proves:
  - BR-CAP-CRM-ACT-002-01
  preconditions: The caller may create activities but not tasks.
  steps: Submit an activity asking for a follow-up.
  expected: The API returns Forbidden without retaining either record.
  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 a follow-up task to a caller
    without crm.tasks.create: 403'
  - TST-CRM-ACT-002
  provenance: test
  source: 'services-crm:modules/activities/tests/e2e/activities.e2e.spec.js#refuses a follow-up task to
    a caller without crm.tasks.create: 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-002-02
  title: Reject invalid follow-up titles
  level: api
  proves:
  - BR-CAP-CRM-ACT-002-03
  preconditions: The activity type is active.
  steps: Request follow-ups with blank and 501-character titles.
  expected: The title fails validation before either record is committed.
  negative: true
  data_needs: Each run creates and isolates the records it needs.
  bound_to: []
  provenance: proposed
  source: services-crm:modules/activities/aws/api/activities.schemas.ts:followUpTaskSchema
  category: validation
- id: ATS-CRM-ACT-002-03
  title: Create a follow-up for the selected record context
  level: api
  proves:
  - BR-CAP-CRM-ACT-002-04
  - BR-CAP-CRM-ACT-002-05
  preconditions: A seven-day suggestion accompanies two contacts and an organization.
  steps: Log an activity requesting a follow-up without an explicit due day.
  expected: The task uses the primary contact, organization and activity workspace date plus seven days.
  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#creates
    the follow-up task it is asked for, about the primary contact and the organization, due the type’s
    follow-up days after the activity
  - react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0690.spec.ts#CRM-ACC-0690
  - react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0706.spec.ts#CRM-ACC-0706
  - TST-CRM-ACT-007
  - TST-CRM-ACT-034
  - TST-CRM-ACT-050
  provenance: test
  source: services-crm:modules/activities/tests/integration/services/persistence/activities.integration.spec.js#creates
    the follow-up task it is asked for, about the primary contact and the organization, due the type’s
    follow-up days after the activity
  category: interaction
  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-002-04
  title: Compare browser and workspace follow-up dates
  level: browser
  proves:
  - BR-CAP-CRM-ACT-002-06
  preconditions: The browser day differs from the workspace day.
  steps: Create a late-evening meeting with a seven-day follow-up through the form and API.
  expected: The test records each calculation and demonstrates their possible day difference.
  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-0705.spec.ts#CRM-ACC-0705
  - TST-CRM-ACT-049
  provenance: test
  source: react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0705.spec.ts#CRM-ACC-0705
  category: boundary
  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-002-05
  title: Roll back an invalid follow-up transaction
  level: api
  proves:
  - BR-CAP-CRM-ACT-002-09
  preconditions: The requested task type is missing.
  steps: Submit activity creation with that follow-up type.
  expected: Neither activity nor follow-up remains after refusal.
  negative: true
  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
    nothing when the follow-up task is refused
  - TST-CRM-ACT-007
  provenance: test
  source: services-crm:modules/activities/tests/integration/services/persistence/activities.integration.spec.js#writes
    nothing when the follow-up task is refused
  category: failure
  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-002-06
  title: Avoid duplicate follow-ups on replay
  level: api
  proves:
  - BR-CAP-CRM-ACT-002-10
  preconditions: A client-selected activity identifier accompanies a follow-up.
  steps: Deliver the identical create twice.
  expected: Exactly one follow-up task remains.
  negative: true
  data_needs: Each run creates and isolates the records it needs.
  bound_to:
  - services-crm:modules/activities/tests/integration/services/persistence/activities.create-retries.integration.spec.js#makes
    one follow-up task
  - TST-CRM-ACT-006
  provenance: test
  source: services-crm:modules/activities/tests/integration/services/persistence/activities.create-retries.integration.spec.js#makes
    one follow-up task
  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-002-07
  title: A changed follow-up suggestion affects only a new save
  category: interaction
  level: api
  proves:
  - BR-CAP-CRM-ACT-002-05
  - BR-CAP-CRM-ACT-002-08
  - BR-CAP-CRM-ACT-008-07
  preconditions: A type suggests seven days and an earlier interaction already has a follow-up.
  steps: Change its suggestion to two days, log another interaction through the API without an explicit
    due day, and inspect both tasks.
  expected: The new task uses the revised suggestion; earlier work retains its due day and editing the
    earlier interaction adds no task.
  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#creates
    the follow-up task it is asked for, about the primary contact and the organization, due the type’s
    follow-up days after the activity; react-console:components/activities/log-activity-sheet.tsx:offersFollowUp;
    services-crm:modules/activities/tests/integration/services/persistence/activity-types.integration.spec.js#refuses
    to remove an outcome an activity has, saying to deactivate it instead
  exercises:
  - CAP-CRM-ACT-002
  - CAP-CRM-ACT-008
  - CAP-CRM-ACT-001
  - CAP-CRM-ACT-010
  related:
  - CAP-CRM-ACT-008
  - CAP-CRM-ACT-001
  - 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-069'
  transition: 'gap: FND-CRM-ACT-069'
  validation: covered
  permission: covered
  edge: 'gap: FND-CRM-ACT-069'
  failure: covered
  boundary: covered
  concurrency: 'gap: FND-CRM-ACT-069'
  invariant: covered
  interaction: covered
coverage_obligations:
  finding: FND-CRM-ACT-069
  unproved_rules:
  - BR-CAP-CRM-ACT-002-07
  permission_matrix:
    keys:
    - crm.activities.create
    - crm.tasks.create
    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-008
  scenarios:
  - ATS-CRM-ACT-002-07
  finding: FND-CRM-ACT-069
permission_coverage:
- key: crm.activities.create
  finding: FND-CRM-ACT-069
  note: The finding covers unproved operation and surface combinations; a permission-category scenario
    is not a complete permission matrix.
- key: crm.tasks.create
  finding: FND-CRM-ACT-069
  note: The finding covers unproved operation and surface combinations; a permission-category scenario
    is not a complete permission matrix.
---

# Create a follow-up while recording an interaction: 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-002-01` | `ATS-CRM-ACT-002-01` |
| `BR-CAP-CRM-ACT-002-03` | `ATS-CRM-ACT-002-02` |
| `BR-CAP-CRM-ACT-002-04` | `ATS-CRM-ACT-002-03` |
| `BR-CAP-CRM-ACT-002-05` | `ATS-CRM-ACT-002-03`, `ATS-CRM-ACT-002-07` |
| `BR-CAP-CRM-ACT-002-06` | `ATS-CRM-ACT-002-04` |
| `BR-CAP-CRM-ACT-002-07` | `FND-CRM-ACT-069` |
| `BR-CAP-CRM-ACT-002-08` | `ATS-CRM-ACT-002-07` |
| `BR-CAP-CRM-ACT-002-09` | `ATS-CRM-ACT-002-05` |
| `BR-CAP-CRM-ACT-002-10` | `ATS-CRM-ACT-002-06` |

## Interactions With Related Capabilities

A type suggests seven days and an earlier interaction already has a follow-up. Change its suggestion to two days, log another interaction through the API without an explicit due day, and inspect both tasks.

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