---
id: ADR-MBR-STR-011
title: Make Version Requirements Explicit Per Operation
product_area: membership
module: structure
revision: 1
status: proposed
design_intent: proposed
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
decision: >-
  Configuration updates and deletions and structure replacements require a read version; moves, merges and
  unit closure accept one optionally, and unit or kind deletion and link ending accept none.
constrains:
  - DOM-MBR-STR-006
  - SVC-MBR-STR-structure
  - SVC-MBR-STR-configuration
  - WF-MBR-STR-005
origin: >-
  services-membership:modules/structure/aws/api/structure.routes.ts (header: every update of an existing
  record takes the version it read); services-membership:aws/api/configuration-routes.ts
alternatives:
  - option: Allow all saves to overwrite the latest record.
    why_not: That would remove the implemented stale-write protection for competing administrator saves.
  - option: Hold record locks throughout an editing session.
    why_not: >-
      Request-spanning locks would require a new session contract and could block staff while another editor
      is idle.
consequences:
  - Required version checks reject conflicting saves without applying partial content.
  - An unchanged configuration save still advances its version without adding a content revision.
  - Omitting an optional tree-operation version means acting on the currently locked state.
supersedes: []
evidence:
  - >-
    services-membership at 5994c270: modules/configuration/services/persistence/configuration-store.ts;
    modules/structure/services/persistence/organizational-units.ts (updateOrganizationalUnit);
    services/tree/tree-edits.ts
---

# Make Version Requirements Explicit Per Operation

## Context

Administrators and imports can change the same records. The API contracts use versions unevenly, so clients need explicit requirements rather than a universal version claim.

## Decision

This record describes existing required, optional and absent checks. Tree serialization protects structural validation but does not supply a version parameter to operations that lack one.

## Alternatives Considered

Allow all saves to overwrite the latest record. That would remove the implemented stale-write protection for competing administrator saves. Hold record locks throughout an editing session. Request-spanning locks would require a new session contract and could block staff while another editor is idle.

## Consequences

Required version checks reject conflicting saves without applying partial content. An unchanged configuration save still advances its version without adding a content revision. Omitting an optional tree-operation version means acting on the currently locked state.
