---
id: ADR-CRM-ACT-004
title: Read versions and creation recovery have operation-specific exceptions
product_area: crm
module: activities-tasks
revision: 1
status: proposed
design_intent: confirmed
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
decision: >-
  Apply the recorded read-version and creation-recovery policy to console edits and task
  lifecycle actions, while documenting conditional claims, optional-version assignment and
  unversioned deletion as their actual exceptions.
constrains:
  - DOM-CRM-ACT-001
  - DOM-CRM-ACT-003
  - SVC-CRM-ACT-activities
  - SVC-CRM-ACT-tasks
  - WF-CRM-ACT-001
  - WF-CRM-ACT-002
  - WF-CRM-ACT-003
  - SCR-CRM-ACT-004
  - SCR-CRM-ACT-006
origin: >-
  Andrew's rulings D-05 (CRM-M1, version checks), D-43 (CRM-M8, 2026-10-19: identifier
  generated before creates and reused on retry; re-read after an ambiguous edit) and D-52
  (version required on task closing actions).
alternatives:
  - option: Accept ordinary edits without checking the read version.
    why_not: A later save could erase changes made since the form opened.
  - option: Add an independent request key for every creation.
    why_not: >-
      The cited policy chose the record identifier as the recovery key instead of a second
      client identifier.
consequences:
  - A version mismatch refuses an edit without committing its proposed changes.
  - >-
    A retained interaction row recognizes a matching creation digest before another
    follow-up or file preparation; differing content conflicts.
  - The console verifies uncertain edits by comparing submitted values with a fresh read.
  - >-
    Assignment can omit its version, while claims, releases and deletion have separate
    versionless contracts.
supersedes: []
evidence:
  - >-
    services-crm at a8d1364f: lib/db/create-replays.ts;
    modules/activities/services/persistence/activities.ts (createActivity,
    replayActivityCreate, updateActivity); modules/tasks/services/persistence/tasks.ts;
    docs/milestones/CRM-M8-activities-and-tasks.md (D-43, D-52).
  - 'react-console at baf6dae3: lib/activities/api.ts; lib/api/tasks.ts.'
---

# Read versions and creation recovery have operation-specific exceptions

## Context

Lost responses can conceal successful saves, while stale forms can overwrite newer work. The recorded policy addresses both through read versions and creation recovery.

## Decision

Console creation chooses its identifier before sending. Interaction replay additionally compares a stored digest while the row exists. Ordinary edits and public task lifecycle actions use versions, but the title’s broad policy has the documented implementation exceptions.

## 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

Recovery avoids repeated live-row interaction creation. Clients must follow the contract of each operation rather than assume every write has identical version or repeat semantics.
