---
id: TST-CRM-DQ-177
title: Duplicate review against dev
kind: browser-lifecycle
product_area: crm
module: data-quality
revision: 1
status: draft
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  rhythm-v2-docs: 61315bb0538e230286687677da2b04b1d33f162b
repository: react-console
files:
  - e2e/dev/duplicates.dev.spec.ts
implements: []
environment: deployed-dev
command: npx playwright test --project=dev e2e/dev/duplicates.dev.spec.ts --workers=1
gate: This is the dev browser tier; credentials and seeded records are prerequisites.
implementation_state: implemented
implementation_evidence: observed
latest_result: not-run
conformance: not-verified
estimated_minutes: 30
isolation: Use run-owned records; serialize changes to shared configuration and restore the original values.
retries: none
proves_controls: []
evidence:
  - provenance: test
    source:
      - 'react-console:e2e/dev/duplicates.dev.spec.ts'
  - provenance: documented
    source: 'rhythm-v2-docs:specs/CONVENTIONS.md#10.6 Executable Test Suite'
lifecycles:
  create: partial
  change: partial
  archive: not-applicable
  delete: partial
  merge: partial
  reconcile: not-applicable
lifecycle_gaps:
  - FND-CRM-DQ-074
lifecycle_notes:
  archive: Archiving ordinary CRM records belongs to Entities; these tests concern duplicate review and identity combination.
  reconcile: This runner does not establish deployed recovery.
---

# Duplicate review against dev

## Verification Boundary

The browser, authenticated console and dev backend are real. Environment-selected identities and cleanup must be limited to records the run owns.

## What This Suite Proves

The dev console displays duplicate work and sends staff decisions through the hosted routes. No capability scenario is mapped to this selection yet; its file inventory records existing executable coverage without assigning product proof. No control claim is assigned without a check that fails when the control is removed.

## What It Does Not Prove

The catalog can block a journey or restrict it to an API tier. A listed file therefore does not establish every browser step or external participant outcome.

## Level and Rationale

A browser is needed to check the visible controls, navigation and adapter requests. Lower-level service checks cannot establish those screen outcomes.

## Lifecycle Coverage

Create, change and cleanup receive partial credit because these tests select data-quality behavior rather than the complete ordinary record lifecycle. Merge receives partial credit where it appears: a test selection does not establish every contact, organization and external participant variant. Archive belongs to the ordinary record module; deployed reconciliation remains outside these browser and local API selections. The lifecycle finding records these limits.

## Real Dependencies and Test Doubles

The browser, authenticated console and dev backend are real. Environment-selected identities and cleanup must be limited to records the run owns.

## Must Not Be Doubled

Keep the rendered components and request adapters real; replacing them would remove the console behavior under examination.

## Fixtures and Isolation

Use run-owned records; serialize changes to shared configuration and restore the original values. Acceptance journeys use run-specific names and registered cleanup; shared configuration changes require the runner’s isolation project.

## Determinism and Retries

The register records no new runtime result. Existing polling and fixture clocks remain part of the authored tests; polling for completion is not a retry of a failed case. Run with at most three workers and diagnose a failure before rerunning it.

## How It Runs

The frontmatter records the scoped command and its runner tier. Supply the configuration and fixtures required by that Playwright project.

## Coverage Gaps

The selection has no scenario mapping; mapping requires comparing the assertions with a complete scenario outcome. The capability gap records identify unbound obligations, and the grouped-suite finding records incomplete lifecycle and runtime coverage.
