---
id: ADR-CRM-DQ-007
title: Bind execution to the reviewed preview
product_area: crm
module: data-quality
revision: 1
status: proposed
design_intent: confirmed
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
decision: >-
  Open-plan reads, edits and validation refresh the stored preview and material
  hash; submission and execution compare a new preview against that stored
  approval boundary.
constrains:
  - DOM-CRM-DQ-003
  - STATE-CRM-DQ-004
  - WF-CRM-DQ-005
  - WF-CRM-DQ-006
  - SCR-CRM-DQ-008
origin: 'services-crm:docs/milestones/CRM-M4-duplicates-and-merge.md#D-31 and #D-33'
alternatives:
  - option: Approve only related-record counts
    why_not: >-
      Replacing a related record would leave the count unchanged and evade
      review.
  - option: Require only a client-supplied hash
    why_not: Omitting that hash must not permit an unseen plan to execute.
consequences:
  - A qualified colleague’s read can update the stored approval boundary.
  - >-
    Labels, estimates and carried dismissals do not invalidate approval on their
    own.
supersedes: []
evidence:
  - >-
    services-crm at a8d1364f: modules/merges/services/merges/merge-plans.ts
    (readMergePlan, assertPlanIsTheOneLastShown);
    services/planning/merge-engine.ts (materialPlanHash).
---

# Bind execution to the reviewed preview

## Context

Changing a task without changing its count must still invalidate approval.

## Decision

Open-plan reads, edits and validation refresh the stored preview and material hash; submission and execution compare a new preview against that stored approval boundary.

## Alternatives Considered

Approve only related-record counts. Replacing a related record would leave the count unchanged and evade review.

Require only a client-supplied hash. Omitting that hash must not permit an unseen plan to execute.

## Consequences

A qualified colleague’s read can update the stored approval boundary. Labels, estimates and carried dismissals do not invalidate approval on their own.
