---
id: ADR-CRM-ACT-001
title: One activity is linked to every record it concerns
product_area: crm
module: activities-tasks
revision: 1
status: proposed
design_intent: proposed
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
decision: >-
  Keep one interaction and typed associations to each related contact or organization,
  with database-maintained timeline copies on those associations.
constrains:
  - DOM-CRM-ACT-001
  - DOM-CRM-ACT-005
  - SVC-CRM-ACT-activities
  - WF-CRM-ACT-001
  - WF-CRM-ACT-007
origin: >-
  Activities migration design decisions D5 and D7 (services-crm
  docs/migrations/activities/README.md §9); the milestone is Proposed, so no product
  ruling confirms it beyond D-50 (primary link chosen by the user).
alternatives:
  - option: Duplicate the interaction for each related record.
    why_not: >-
      Independent copies would require coordinated edits and deduplication in workspace
      views.
  - option: Use a generic object-and-record association without typed references.
    why_not: >-
      This alternative would lose the local foreign-key protections for related CRM
      records.
  - option: Persist interaction counts and latest instants on related records.
    why_not: >-
      Stored summaries would require another coordinated writer; the cited module
      measurements instead support computing them from links.
consequences:
  - One shared interaction contributes once to each surviving related-record timeline.
  - >-
    Related-record deletion retains the interaction even when no association or primary
    survives.
  - >-
    Indexed link copies supply record-local timeline reads and remain a database
    responsibility.
  - Merge transfers associations and collapses duplicates without copying interactions.
supersedes: []
evidence:
  - >-
    services-crm at a8d1364f: modules/activities/db/activity-links.table.ts;
    services/persistence/activities.ts (replaceActivityLinks, reassignActivityLinks);
    docs/migrations/activities/README.md §2, §9; modules/activities/README.md (The
    timeline summary at volume).
---

# One activity is linked to every record it concerns

## Context

An interaction can involve several people and organizations. Staff need a consistent record of that shared event in each relationship context.

## Decision

The observed design gives Activity ownership of typed links and their indexed copies. Ordinary save requirements differ from post-deletion retention; the object invariants record that distinction. This record does not extend the cited planning approval.

## Alternatives Considered

The structured alternatives describe concrete competing designs and their tradeoffs. Where the origin records an existing ruling, it remains the authority; an observed implementation does not establish Product’s rejection of every alternative.

## Consequences

Shared context remains one interaction across timelines. Retained unlinked interactions need the already-recorded management behavior, and computed summaries avoid another persisted fact home.
