---
id: WF-CMT-MTG-018
title: Preserve Historical Contacts During Merge
trigger: CRM invokes the Committees merge participant for planning and application.
product_area: committees
module: meetings
revision: 1
status: draft
design_intent: proposed
implementation_evidence: observed
inference: []
source_sha:
  services-committees: 36129c24daeaadcdb339218c38cdeaff9861359d
implements:
  - CAP-CMT-MTG-003
  - CAP-CMT-MTG-018
crosses:
  - SVC-CMT-MTG-meetings
  - SVC-CRM-DQ-merges
idempotency: >-
  The declared preserve-history policies leave this module’s references
  untouched. Reapplying them makes no local changes.
concurrency: >-
  CRM owns the merge transaction and calls the Committees database participant
  within it.
hops:
  - 'n': 1
    actor_or_service: CRM merge
    action: Report the planned Committees effects according to its reference policies.
    anchor: >-
      services-committees:lib/record-merge/committees-references.ts:committeesMergeReferences
    seam: sync
    on_failure: Let the merge planner refuse an invalid plan.
    left_inconsistent: No applied merge effects.
    observer: CRM merge execution evidence.
    provenance: observed
    source: >-
      services-committees:lib/record-merge/committees-references.ts:committeesMergeReferences
  - 'n': 2
    actor_or_service: Committees merge participant
    action: >-
      Retain historical contact references in meeting, decision, disclosure and
      recruitment records rather than moving them to the surviving contact.
    anchor: >-
      services-committees:lib/record-merge/committees-references.ts:committeesMergeReferences
    seam: sync
    on_failure: Roll back the enclosing merge on a participant failure.
    left_inconsistent: A future nomination slate can still name the merged-away contact.
    observer: No dedicated observer is implemented.
    provenance: observed
    source: >-
      services-committees:lib/record-merge/committees-references.ts:committeesMergeReferences
branches: []
waits: []
evidence:
  - >-
    services-committees at 36129c24: lib/record-merge/committees-references.ts;
    tests/integration/db/merge-coverage.integration.spec.ts (named in the
    references header)
controls:
  - TC-IAM-006
  - TC-AZ-001
  - TC-AZ-002
  - TC-AZ-003
  - TC-AZ-004
  - TC-AZ-006
  - TC-TEN-001
  - TC-TEN-002
  - TC-TEN-003
  - TC-TEN-004
  - TC-SEC-001
  - TC-SEC-004
  - TC-DAT-001
  - TC-DAT-002
  - TC-DAT-003
  - TC-LOG-001
  - TC-LOG-002
  - TC-LOG-003
  - TC-LOG-004
  - TC-LOG-005
  - TC-AVL-004
  - TC-MON-001
  - TC-MON-002
  - TC-PI-001
  - TC-PI-002
  - TC-PI-003
  - TC-PI-004
  - TC-PI-005
  - TC-PRV-001
  - TC-PRV-002
  - TC-PRV-004
---
# Preserve Historical Contacts During Merge

## What It Does

CRM invokes the Committees merge participant for planning and application. Preserving historical identity protects the record of who participated. It also leaves active nomination references unresolved for future appointment work; that consequence needs a deliberate product policy.

## The Flow

```mermaid
flowchart TD
  H1["Report the planned Committees effects according to its reference policies."]

  H2["Retain historical contact references in meeting, decision, disclosure and recruitment records rather than movi"]
  H1 --> H2
```

Report the planned Committees effects according to its reference policies. Retain historical contact references in meeting, decision, disclosure and recruitment records rather than moving them to the surviving contact.

## When Something Fails

Let the merge planner refuse an invalid plan. No applied merge effects. Roll back the enclosing merge on a participant failure. A future nomination slate can still name the merged-away contact.

## Open Design Questions

Preserving historical identity protects the record of who participated. It also leaves active nomination references unresolved for future appointment work; that consequence needs a deliberate product policy.
