---
id: WF-MBR-MEM-026
title: Record change history at commit
trigger: 'A membership, term, collection or supported configuration record changes.'
product_area: membership
module: memberships
revision: 1
status: draft
design_intent: proposed
implementation_evidence: observed
inference: []
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
implements:
  - CAP-MBR-MEM-018
moves: []
crosses:
  - SVC-MBR-MEM-history
  - SVC-MBR-MEM-memberships
  - SVC-MBR-MEM-events
idempotency: >-
  Changes reversed within the same save and cache-only refreshes produce no
  revision. Settlement produces one revision for the relevant recorded change.
concurrency: >-
  Version and revision triggers operate within the writer’s transaction.
  Dispatcher cleanup happens after history has committed.
hops:
  - 'n': 1
    actor_or_service: Database triggers
    action: Capture changed-row versions with transaction attribution.
    anchor: >-
      services-membership:db/migrations/20261018044117_commerce_participant.sql:memberships_versions_capture
    seam: sync
    on_failure: Attribution refusal also rejects the originating business change.
    left_inconsistent: No partial local change remains.
    observer: Writer-visible operation result
    provenance: test
    source: >-
      services-membership:modules/history/tests/integration/membership-history.integration.spec.ts#refuses
      at commit a write that names no source and no actor
  - 'n': 2
    actor_or_service: Change-events capture
    action: >-
      Collect relevant record and collection changes on their declared history
      streams.
    anchor: >-
      services-membership:modules/history/db/change-event-streams.ts:MEMBERSHIP_STREAM
    seam: sync
    on_failure: Reject unsupported history sources and roll back the transaction.
    left_inconsistent: No partial local change remains.
    observer: Writer-visible operation result
    provenance: unknown
    source: FND-MBR-MEM-030
  - 'n': 3
    actor_or_service: Change-events dispatcher
    action: >-
      Settle an attributed revision through deferred database triggers at
      commit; later dispatch removes history-only transport rows.
    anchor: >-
      services-membership:modules/history/db/change-event-streams.ts:MEMBERSHIP_STREAM
    seam: sync
    on_failure: A settlement error aborts commit and removes the business change.
    left_inconsistent: >-
      A committed relevant change already has its revision; only transport
      cleanup can lag.
    observer: Attributed revision timeline
    provenance: observed
    source: >-
      services-membership:aws/membership.change-events.ts:HISTORY_CHANGE_EVENT_STREAMS;
      modules/history/db/change-event-streams.ts:MEMBERSHIP_STREAM
branches: []
waits:
  - >-
    Timeline revisions are durable at commit; only history transport cleanup is
    delayed.
evidence:
  - >-
    services-membership at 5994c270: modules/history (db, services, history
    configurations); aws/membership.change-events.ts;
    db/migrations/20261018034347_snapshots_and_history.sql
controls: [TC-AVL-002, TC-AVL-003, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-005, TC-AZ-006, TC-CHG-001, TC-CHG-002, TC-CHG-003, TC-CHG-004, TC-CRY-001, TC-CRY-002, TC-CRY-003, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-DAT-007, TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-SEC-001, TC-SEC-004, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-TEN-004]
---

# Record change history at commit

## What It Does

Temporal versions and attributed timeline revisions commit with relevant record changes. Database capture ensures staff writes and partner paths share the same attribution checks.

## The Flow

```mermaid
flowchart TD
  H1["Capture changed-row versions with transaction attribution"]
  H2["Collect relevant record and collection changes on their declared history streams"]
  H1 --> H2
  H3["Settle an attributed revision through deferred database triggers at commit; later dispatch removes history-only transport rows"]
  H2 --> H3
```

## When Something Fails

Missing or unsupported attribution prevents the business commit. There is no asynchronous timeline delay. The existing Commerce source incompatibility blocks placement, and separate findings cover facts omitted from the rendered revision and automation attribution.
