Independent examination of duplicate review and record merging
Examination method and limits
An OpenAI examiner checked the draft against the two pinned repositories, the authoring contract, the approved Entities example and the registered source scope. The examination compared route schemas and permission gates with service decisions, storage constraints, background execution and scoped console components. It also inspected the approval records and the test bodies behind material disagreements, rather than accepting test names as proof.
The requested planning brief is unavailable in both the starting checkout and the fetched default branch. Source inspection therefore establishes agreement with the registered implementation and records, while the brief comparison remains open. Platform-owned execution and configuration and ordinary record-page mounts remain outside the registered source scope.
No CRM or console runtime suite was executed during this documentation examination. Test bindings describe assertions authored at the pinned commits; they do not claim a new passing runtime result. The complete integration and unit inventory was indexed, with cited evidence inspected, rather than every file exhaustively read. Every source anchor was checked for file and symbol or literal test-title existence; the final anchor audit contains 1,118 references across 150 distinct source files with no missing anchors before the final report and scope finding were added.
Counts examined
| Item | Count | Result |
|---|---|---|
| Existing module artifacts | 57 | All rewritten; report is an additional artifact |
| Features | 5 | Grouping language rewritten; explicit approval records cited |
| Key Concepts | 5 | Three active broad concepts; two facet concepts superseded without reusing their identities |
| Capabilities | 19 | Outcome grain retained; variants added as rule rows |
| Rules | 211 | Includes four newly allocated rules |
| Required-proof rules | 172 | Acceptance scenario or explicit finding required |
| Capability scenarios and edge cases | 45 | 37 scenarios and eight edge cases rewritten |
| Journeys | 6 | All stories, steps, alternatives, failures and assertions rewritten |
| Journey steps and assertions | 38 / 14 | Provenance and source retained or corrected as listed below |
| Acceptance Test Sets | 19 | Coverage tables extended for newly required proof |
| Acceptance scenarios | 158 | Four additions; 150 bound and eight unbound |
| Findings | 34 | 24 retained and rewritten; ten examination findings added |
| Open questions | 5 | Recommendations rewritten as product proposals |
| Shared actor additions | 3 | Only Data Quality additions rewritten and individually pinned |
The three active concept bodies each contain between 400 and 900 words and use the required six sections. The two superseded concept records retain their identities and historical fields, with their active explanation folded into the appropriate parent. A comparison of structured human-readable values against the starting commit finds no retained draft wording among the audited prose fields; technical anchors, identifiers and controlled values remain intact unless an examination correction is recorded below.
Coverage
Coverage means a capability or evidence mapping describes the item. It does not mean every mapped test is runnable or the behavior has product approval.
| Inventory | Covered / total | Capability or evidence home | Uncovered or limited evidence |
|---|---|---|---|
| HTTP operations | 30 / 30 | Operation ownership catalogue in MOD-CRM-DQ; 17 duplicate operations and 13 merge operations | None in the registered route inventory; module health routes excluded |
| Storage declarations | 11 / 11 files; 16 / 16 physical tables | Storage catalogue in MOD-CRM-DQ | None; earlier physical-table count corrected |
| Permission keys | 8 / 8 | Permission catalogue in MOD-CRM-DQ | Configuration-page guard remains unverified: FND-CRM-DQ-034 |
| Service end-to-end files | 7 / 7 | End-to-end file catalogue in MOD-CRM-DQ | Indexed and statically examined; not executed in this job |
| Integration and unit files | 102 / 102 indexed | 74 integration and 28 unit files; artifact evidence and bindings | No exhaustive reading or runtime claim for the full inventory |
| Execution, queues and scheduled work | 8 / 8 groups | Execution catalogue in MOD-CRM-DQ | Held attention delivery: FND-CRM-DQ-017; external participant execution: FND-CRM-DQ-024 |
| Registered console pages | 8 / 8 | Hosted-page catalogue in MOD-CRM-DQ | None within the registered page directories |
| Declared console surfaces including external mounts | 8 / 11 directly scoped surfaces | Eight pages plus configuration and two record-page mounts | Configuration, contact mount and organization mount: FND-CRM-DQ-034 |
| Prior inventory capability identities | 23 / 23 mapped | Capability supersedes fields | Mapping is historical coverage, not current proof |
| Prior inventory rule identities | 76 / 76 mapped | Rule rows and findings | Conflicting prior assertions: FND-CRM-DQ-003 and FND-CRM-DQ-033 |
| Prior merging journey identities | 60 / 60 referenced or absorbed | Journey, acceptance and supersedes references | Blocked and incomplete proof: FND-CRM-DQ-024 and FND-CRM-DQ-031 |
| Required-proof rules | 172 / 172 scenario or finding | Acceptance coverage tables and FND-CRM-DQ-032 | Eight acceptance scenarios unbound; a bound scenario still requires runtime validation |
The operation, storage, permission, end-to-end file, execution and hosted-page catalogues remain the detailed mapping homes. No unrelated capability was split or introduced merely to increase the file count. The added score bounds, unsupported-type refusal, re-check lookup behavior and duration estimate are variants of existing outcomes.
Final text by artifact
Every row below received an OpenAI rewrite of its prose and structured human-readable text. Capability rewrites cover statements, examples, constraints and outcome language; acceptance rewrites cover titles, setup, actions, results and data needs; journey rewrites cover all paths, outcomes and assertions. The evidence representation now stores repository, pinned revision, paths and an examiner-written note rather than draft prose embedded in an evidence string.
| Artifact | Final text and structural work |
|---|---|
ATS-CRM-DQ-001 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
ATS-CRM-DQ-002 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
ATS-CRM-DQ-003 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
ATS-CRM-DQ-004 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
ATS-CRM-DQ-005 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
ATS-CRM-DQ-006 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
ATS-CRM-DQ-007 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
ATS-CRM-DQ-008 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
ATS-CRM-DQ-009 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
ATS-CRM-DQ-010 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
ATS-CRM-DQ-011 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
ATS-CRM-DQ-012 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
ATS-CRM-DQ-013 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
ATS-CRM-DQ-014 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
ATS-CRM-DQ-015 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
ATS-CRM-DQ-016 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
ATS-CRM-DQ-017 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
ATS-CRM-DQ-018 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
ATS-CRM-DQ-019 | All scenario text and coverage explanation rewritten; test identity anchors retained except corrections below. |
CAP-CRM-DQ-001 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CAP-CRM-DQ-002 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CAP-CRM-DQ-003 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CAP-CRM-DQ-004 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CAP-CRM-DQ-005 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CAP-CRM-DQ-006 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CAP-CRM-DQ-007 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CAP-CRM-DQ-008 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CAP-CRM-DQ-009 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CAP-CRM-DQ-010 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CAP-CRM-DQ-011 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CAP-CRM-DQ-012 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CAP-CRM-DQ-013 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CAP-CRM-DQ-014 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CAP-CRM-DQ-015 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CAP-CRM-DQ-016 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CAP-CRM-DQ-017 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CAP-CRM-DQ-018 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CAP-CRM-DQ-019 | Purpose, outcomes, all rules and examples, and who acts and what can fail rewritten. |
CON-CRM-DQ-001 | Duplicate evidence and configured response explained together; absorbs the former rule concept. |
CON-CRM-DQ-002 | Superseded as a facet of possible duplicates; historical identity retained. |
CON-CRM-DQ-003 | Working preview, decisions, approval and expiry explained in six sections. |
CON-CRM-DQ-004 | Committed outcome, alias resolution and retained originals explained together; absorbs the former alias concept. |
CON-CRM-DQ-005 | Superseded as a facet of merge outcome; historical identity retained. |
FEAT-CRM-DQ-01 | Grouping purpose and outcome labels rewritten; capability rules remain their own facts. |
FEAT-CRM-DQ-02 | Grouping purpose and outcome labels rewritten; capability rules remain their own facts. |
FEAT-CRM-DQ-03 | Grouping purpose and outcome labels rewritten; capability rules remain their own facts. |
FEAT-CRM-DQ-04 | Grouping purpose and outcome labels rewritten; capability rules remain their own facts. |
FEAT-CRM-DQ-05 | Grouping purpose and outcome labels rewritten; capability rules remain their own facts. |
JNY-CRM-DQ-001 | Story, all steps, alternate paths, failures and assertions rewritten. |
JNY-CRM-DQ-002 | Story, all steps, alternate paths, failures and assertions rewritten. |
JNY-CRM-DQ-003 | Story, all steps, alternate paths, failures and assertions rewritten. |
JNY-CRM-DQ-004 | Story, all steps, alternate paths, failures and assertions rewritten. |
JNY-CRM-DQ-005 | Story, all steps, alternate paths, failures and assertions rewritten. |
JNY-CRM-DQ-006 | Story, all steps, alternate paths, failures and assertions rewritten. |
MOD-CRM-DQ | Boundary, ownership, screen purposes and coverage labels rewritten; physical-table count corrected to sixteen. |
| ACT-CRM-008 | Reviewer name, purpose, goals and broad actions rewritten; individual source revisions added. |
| ACT-CRM-009 | Administrator name, purpose, goals and broad actions rewritten; individual source revisions added. |
| ACT-CRM-010 | Registration actor name, purpose, goals and broad actions rewritten; individual source revisions added. |
| FINDINGS | Every finding and open-question sentence rewritten; ten examination findings allocated and sourced. |
| ID_REGISTRY | Explanations and titles rewritten; four rule and scenario allocations and ten finding allocations recorded before use. |
| PRODUCT-AREAS / MOD-CRM-DQ | Registry status becomes planning examined; source scope remains unchanged. |
The existing shared actor approval record continues to describe the earlier actor layer. It does not approve the three additions. No examination change sets an artifact to approved or changes an observed implementation into confirmed intent. Explicit intent citations were added to features and concepts and normalized across planning artifacts using the recorded overview approvals; existing proposal and evidence-strength values remain unchanged apart from the corrections below.
Verification changes
The following table records every changed protected field other than the shared addition or normalization of pinned source revisions and explicit intent citations. New rows show their initial values. Technical anchors appear only as table data.
| Artifact or row field | Earlier value | Examined value |
|---|---|---|
specs/crm/data-quality/FINDINGS.md.finding_evidence.23.source | "services-crm:modules/merges/tests/unit/services/planning/merge-decisions.spec.js#is blocked when Platform answers that two participants hold logins; react-console:acceptance/crm/journeys/merging/CRM-ACC-0260.json (blocked_reason)" | "services-crm:modules/merges/tests/unit/services/planning/merge-decisions.spec.js#is blocked when Platform answers that two participants hold logins" |
specs/crm/data-quality/FINDINGS.md.finding_evidence.23.additional_sources | Not allocated | ["react-console:acceptance/crm/journeys/merging/CRM-ACC-0260.json"] |
specs/crm/data-quality/FINDINGS.md.finding_evidence.24.source | Not allocated | "rhythm-v2-docs:briefs/planning/crm-data-quality.brief.md (absent at 88ab0e84d1a54e6d01cd481a02038fcdee3736e2 and fetched origin/master)" |
specs/crm/data-quality/FINDINGS.md.finding_evidence.25.source | Not allocated | "services-crm:modules/merges/services/planning/merge-engine.ts:dependentsOf; services-crm:modules/merges/services/planning/merge-engine.ts:materialPlanHash; services-crm:modules/merges/tests/unit/services/planning/organization-decisions.spec.js#keeps the material plan hash when only more affiliations move without combining" |
specs/crm/data-quality/FINDINGS.md.finding_evidence.26.source | Not allocated | "services-crm:modules/duplicates/tests/integration/services/detection/duplicate-change-events.integration.spec.js#fails every event of the group, so the queue delivers the whole group again" |
specs/crm/data-quality/FINDINGS.md.finding_evidence.27.source | Not allocated | "services-crm:modules/duplicates/aws/api/duplicates.routes.ts:getDuplicateRescan" |
specs/crm/data-quality/FINDINGS.md.finding_evidence.28.source | Not allocated | "services-crm:modules/merges/services/planning/plan-changes.ts:describeOne; services-crm:modules/merges/services/planning/merge-labels.ts; services-crm:modules/merges/services/planning/merge-plan.ts:MergeSnapshot" |
specs/crm/data-quality/FINDINGS.md.finding_evidence.29.source | Not allocated | "services-crm:modules/merges/services/merges/merge-plans.ts:readMergePlan; services-crm:modules/merges/services/merges/merge-plans.ts:queueMergeExecution" |
specs/crm/data-quality/FINDINGS.md.finding_evidence.30.source | Not allocated | "react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0245.spec.ts:11; react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0246.spec.ts:11; react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0247.spec.ts:10; react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0262.spec.ts:118; react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0283.spec.ts:176; react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0271.spec.ts:124" |
specs/crm/data-quality/FINDINGS.md.finding_evidence.31.source | Not allocated | "specs/crm/data-quality/planning/capabilities (must_prove flags compared with rule behavior)" |
specs/crm/data-quality/FINDINGS.md.finding_evidence.32.source | Not allocated | "react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0241.spec.ts:116; react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0241.spec.ts:127; services-crm:docs/milestones/CRM-M4-duplicates-and-merge.md#D-32" |
specs/crm/data-quality/FINDINGS.md.finding_evidence.33.source | Not allocated | "specs/PRODUCT-AREAS.md#MOD-CRM-DQ" |
ATS-CRM-DQ-001.scenarios.ATS-CRM-DQ-001-01.proves | ["BR-CAP-CRM-DQ-001-01"] | ["BR-CAP-CRM-DQ-001-01","BR-CAP-CRM-DQ-001-10"] |
ATS-CRM-DQ-001.scenarios.ATS-CRM-DQ-001-01.bound_to | ["services-crm:modules/duplicates/tests/integration/services/detection/duplicate-change-events.integration.spec.js#fails every event of the group, so the queue delivers the whole group again","services-crm:modules/duplicates/tests/integration/services/detection/duplicate-change-events.integration.spec.js#left the records unkeyed, which is what makes delivering the group again the right answer"] | [] |
ATS-CRM-DQ-001.scenarios.ATS-CRM-DQ-001-01.provenance | "test" | "proposed" |
ATS-CRM-DQ-001.scenarios.ATS-CRM-DQ-001-01.source | "services-crm:modules/duplicates/tests/integration/services/detection/duplicate-change-events.integration.spec.js#fails every event of the group, so the queue delivers the whole group again" | "FND-CRM-DQ-027" |
ATS-CRM-DQ-002.scenarios.ATS-CRM-DQ-002-09.level | Not allocated | "unit" |
ATS-CRM-DQ-002.scenarios.ATS-CRM-DQ-002-09.proves | Not allocated | ["BR-CAP-CRM-DQ-002-13"] |
ATS-CRM-DQ-002.scenarios.ATS-CRM-DQ-002-09.bound_to | Not allocated | ["services-crm:modules/duplicates/tests/unit/services/matching/contact-scoring.spec.js#clamps a sum above 100 to 100","services-crm:modules/duplicates/tests/unit/services/matching/contact-scoring.spec.js#clamps a sum below 0 to 0","services-crm:modules/duplicates/tests/unit/services/matching/contact-scoring.spec.js#holds a pair to the lowest cap when two of them fire"] |
ATS-CRM-DQ-002.scenarios.ATS-CRM-DQ-002-09.provenance | Not allocated | "test" |
ATS-CRM-DQ-002.scenarios.ATS-CRM-DQ-002-09.source | Not allocated | "services-crm:modules/duplicates/services/matching/scoring.ts:scoreOf" |
ATS-CRM-DQ-004.scenarios.ATS-CRM-DQ-004-08.level | Not allocated | "api" |
ATS-CRM-DQ-004.scenarios.ATS-CRM-DQ-004-08.proves | Not allocated | ["BR-CAP-CRM-DQ-004-13"] |
ATS-CRM-DQ-004.scenarios.ATS-CRM-DQ-004-08.bound_to | Not allocated | ["services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#refuses a record type detection does not run over, naming the segment (400)"] |
ATS-CRM-DQ-004.scenarios.ATS-CRM-DQ-004-08.provenance | Not allocated | "test" |
ATS-CRM-DQ-004.scenarios.ATS-CRM-DQ-004-08.source | Not allocated | "services-crm:modules/duplicates/aws/api/duplicates.routes.ts:objectTypeOf" |
ATS-CRM-DQ-005.scenarios.ATS-CRM-DQ-005-06.bound_to | ["react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0245.spec.ts#CRM-ACC-0245"] | [] |
ATS-CRM-DQ-005.scenarios.ATS-CRM-DQ-005-06.provenance | "test" | "proposed" |
ATS-CRM-DQ-005.scenarios.ATS-CRM-DQ-005-06.source | "react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0245.spec.ts#CRM-ACC-0245" | "FND-CRM-DQ-031" |
ATS-CRM-DQ-005.scenarios.ATS-CRM-DQ-005-07.level | Not allocated | "api" |
ATS-CRM-DQ-005.scenarios.ATS-CRM-DQ-005-07.proves | Not allocated | ["BR-CAP-CRM-DQ-005-12"] |
ATS-CRM-DQ-005.scenarios.ATS-CRM-DQ-005-07.bound_to | Not allocated | [] |
ATS-CRM-DQ-005.scenarios.ATS-CRM-DQ-005-07.provenance | Not allocated | "proposed" |
ATS-CRM-DQ-005.scenarios.ATS-CRM-DQ-005-07.source | Not allocated | "services-crm:modules/duplicates/aws/api/duplicates.routes.ts:getDuplicateRescan" |
ATS-CRM-DQ-011.scenarios.ATS-CRM-DQ-011-04.bound_to | ["react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0283.spec.ts#CRM-ACC-0283","react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0277.spec.ts#CRM-ACC-0277"] | [] |
ATS-CRM-DQ-011.scenarios.ATS-CRM-DQ-011-04.provenance | "test" | "proposed" |
ATS-CRM-DQ-011.scenarios.ATS-CRM-DQ-011-04.source | "react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0283.spec.ts#CRM-ACC-0283" | "FND-CRM-DQ-031" |
ATS-CRM-DQ-016.scenarios.ATS-CRM-DQ-016-13.bound_to | ["react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0262.spec.ts#CRM-ACC-0262","react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0263.spec.ts#CRM-ACC-0263","react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0251.spec.ts#CRM-ACC-0251","react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0265.spec.ts#CRM-ACC-0265","react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0264.spec.ts#CRM-ACC-0264"] | [] |
ATS-CRM-DQ-016.scenarios.ATS-CRM-DQ-016-13.provenance | "test" | "proposed" |
ATS-CRM-DQ-016.scenarios.ATS-CRM-DQ-016-13.source | "react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0262.spec.ts#CRM-ACC-0262" | "FND-CRM-DQ-031" |
ATS-CRM-DQ-016.scenarios.ATS-CRM-DQ-016-14.level | Not allocated | "unit" |
ATS-CRM-DQ-016.scenarios.ATS-CRM-DQ-016-14.proves | Not allocated | ["BR-CAP-CRM-DQ-016-15"] |
ATS-CRM-DQ-016.scenarios.ATS-CRM-DQ-016-14.bound_to | Not allocated | ["services-crm:modules/merges/tests/unit/services/planning/long-running-merge.spec.js#is one second for a merge that writes no rows at all, a merge that takes a moment still taking one","services-crm:modules/merges/tests/unit/services/planning/long-running-merge.spec.js#is eighteen seconds for the ten thousand rows a large execution begins above","services-crm:modules/merges/tests/unit/services/planning/long-running-merge.spec.js#is the minute and a half phase 4 measured for fifty thousand captured row changes"] |
ATS-CRM-DQ-016.scenarios.ATS-CRM-DQ-016-14.provenance | Not allocated | "test" |
ATS-CRM-DQ-016.scenarios.ATS-CRM-DQ-016-14.source | Not allocated | "services-crm:modules/merges/services/planning/merge-engine.ts:expectedMergeSeconds" |
ATS-CRM-DQ-017.scenarios.ATS-CRM-DQ-017-08.bound_to | ["services-crm:modules/merges/tests/unit/services/planning/organization-decisions.spec.js#changes the material plan hash when an affiliation starts colliding, so the plan previewed before it is stale","services-crm:modules/merges/tests/unit/services/planning/organization-decisions.spec.js#keeps the material plan hash when only more affiliations move without combining"] | [] |
ATS-CRM-DQ-017.scenarios.ATS-CRM-DQ-017-08.provenance | "test" | "proposed" |
ATS-CRM-DQ-017.scenarios.ATS-CRM-DQ-017-08.source | "services-crm:modules/merges/tests/unit/services/planning/organization-decisions.spec.js#changes the material plan hash when an affiliation starts colliding, so the plan previewed before it is stale" | "FND-CRM-DQ-026" |
ATS-CRM-DQ-017.scenarios.ATS-CRM-DQ-017-09.bound_to | ["react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0270.spec.ts#CRM-ACC-0270","react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0271.spec.ts#CRM-ACC-0271","react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0282.spec.ts#CRM-ACC-0282"] | [] |
ATS-CRM-DQ-017.scenarios.ATS-CRM-DQ-017-09.provenance | "test" | "proposed" |
ATS-CRM-DQ-017.scenarios.ATS-CRM-DQ-017-09.source | "react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0270.spec.ts#CRM-ACC-0270" | "FND-CRM-DQ-031" |
CAP-CRM-DQ-001.rules.BR-CAP-CRM-DQ-001-10.must_prove | false | true |
CAP-CRM-DQ-002.rules.BR-CAP-CRM-DQ-002-13.enforced_at | Not allocated | ["service"] |
CAP-CRM-DQ-002.rules.BR-CAP-CRM-DQ-002-13.must_prove | Not allocated | true |
CAP-CRM-DQ-002.rules.BR-CAP-CRM-DQ-002-13.provenance | Not allocated | "observed" |
CAP-CRM-DQ-002.rules.BR-CAP-CRM-DQ-002-13.source | Not allocated | "services-crm:modules/duplicates/services/matching/scoring.ts:scoreOf" |
CAP-CRM-DQ-002.rules.BR-CAP-CRM-DQ-002-13.origin | Not allocated | "none" |
CAP-CRM-DQ-003.rules.BR-CAP-CRM-DQ-003-08.must_prove | false | true |
CAP-CRM-DQ-003.rules.BR-CAP-CRM-DQ-003-09.enforced_at | ["api","console"] | ["api"] |
CAP-CRM-DQ-003.rules.BR-CAP-CRM-DQ-003-11.provenance | "test" | "observed" |
CAP-CRM-DQ-003.rules.BR-CAP-CRM-DQ-003-11.source | "react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0245.spec.ts#CRM-ACC-0245" | "services-crm:modules/duplicates/services/persistence/duplicate-rules.ts:updateDuplicateRule" |
CAP-CRM-DQ-004.rules.BR-CAP-CRM-DQ-004-11.must_prove | false | true |
CAP-CRM-DQ-004.rules.BR-CAP-CRM-DQ-004-13.enforced_at | Not allocated | ["api"] |
CAP-CRM-DQ-004.rules.BR-CAP-CRM-DQ-004-13.must_prove | Not allocated | true |
CAP-CRM-DQ-004.rules.BR-CAP-CRM-DQ-004-13.provenance | Not allocated | "observed" |
CAP-CRM-DQ-004.rules.BR-CAP-CRM-DQ-004-13.source | Not allocated | "services-crm:modules/duplicates/aws/api/duplicates.routes.ts:objectTypeOf" |
CAP-CRM-DQ-004.rules.BR-CAP-CRM-DQ-004-13.origin | Not allocated | "none" |
CAP-CRM-DQ-005.rules.BR-CAP-CRM-DQ-005-12.enforced_at | Not allocated | ["api"] |
CAP-CRM-DQ-005.rules.BR-CAP-CRM-DQ-005-12.must_prove | Not allocated | true |
CAP-CRM-DQ-005.rules.BR-CAP-CRM-DQ-005-12.provenance | Not allocated | "observed" |
CAP-CRM-DQ-005.rules.BR-CAP-CRM-DQ-005-12.source | Not allocated | "services-crm:modules/duplicates/aws/api/duplicates.routes.ts:getDuplicateRescan" |
CAP-CRM-DQ-005.rules.BR-CAP-CRM-DQ-005-12.origin | Not allocated | "none" |
CAP-CRM-DQ-005.scenarios.SC-CAP-CRM-DQ-005-02.provenance | "test" | "unknown" |
CAP-CRM-DQ-005.scenarios.SC-CAP-CRM-DQ-005-02.source | "react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0245.spec.ts#CRM-ACC-0245" | "FND-CRM-DQ-031" |
CAP-CRM-DQ-006.rules.BR-CAP-CRM-DQ-006-03.must_prove | false | true |
CAP-CRM-DQ-006.scenarios.SC-CAP-CRM-DQ-006-02.provenance | "test" | "unknown" |
CAP-CRM-DQ-006.scenarios.SC-CAP-CRM-DQ-006-02.source | "react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0247.spec.ts#CRM-ACC-0247" | "FND-CRM-DQ-031" |
CAP-CRM-DQ-008.rules.BR-CAP-CRM-DQ-008-10.must_prove | false | true |
CAP-CRM-DQ-008.rules.BR-CAP-CRM-DQ-008-11.must_prove | false | true |
CAP-CRM-DQ-009.scenarios.SC-CAP-CRM-DQ-009-02.provenance | "test" | "unknown" |
CAP-CRM-DQ-009.scenarios.SC-CAP-CRM-DQ-009-02.source | "react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0246.spec.ts#CRM-ACC-0246" | "FND-CRM-DQ-031" |
CAP-CRM-DQ-013.rules.BR-CAP-CRM-DQ-013-10.provenance | "test" | "documented" |
CAP-CRM-DQ-013.rules.BR-CAP-CRM-DQ-013-10.source | "services-crm:modules/merges/tests/integration/services/merges/lookup-labels.integration.spec.js#marks a type the tenant has archived, so a plan never offers one as though it were in use" | "services-crm:docs/merging/experience/functional-requirements.md" |
CAP-CRM-DQ-013.rules.BR-CAP-CRM-DQ-013-11.must_prove | false | true |
CAP-CRM-DQ-014.rules.BR-CAP-CRM-DQ-014-11.must_prove | false | true |
CAP-CRM-DQ-016.rules.BR-CAP-CRM-DQ-016-11.must_prove | false | true |
CAP-CRM-DQ-016.rules.BR-CAP-CRM-DQ-016-14.must_prove | false | true |
CAP-CRM-DQ-016.rules.BR-CAP-CRM-DQ-016-15.enforced_at | Not allocated | ["service"] |
CAP-CRM-DQ-016.rules.BR-CAP-CRM-DQ-016-15.must_prove | Not allocated | true |
CAP-CRM-DQ-016.rules.BR-CAP-CRM-DQ-016-15.provenance | Not allocated | "observed" |
CAP-CRM-DQ-016.rules.BR-CAP-CRM-DQ-016-15.source | Not allocated | "services-crm:modules/merges/services/planning/merge-engine.ts:expectedMergeSeconds" |
CAP-CRM-DQ-016.rules.BR-CAP-CRM-DQ-016-15.origin | Not allocated | "services-crm:docs/merging/decisions.md#D10" |
CAP-CRM-DQ-017.rules.BR-CAP-CRM-DQ-017-08.must_prove | false | true |
CAP-CRM-DQ-017.rules.BR-CAP-CRM-DQ-017-09.provenance | "test" | "observed" |
CAP-CRM-DQ-017.rules.BR-CAP-CRM-DQ-017-09.source | "services-crm:modules/merges/tests/unit/services/planning/organization-decisions.spec.js#changes the material plan hash when an affiliation starts colliding, so the plan previewed before it is stale" | "services-crm:modules/merges/services/planning/merge-engine.ts:materialPlanHash" |
CON-CRM-DQ-001.supersedes | [] | ["CON-CRM-DQ-002"] |
CON-CRM-DQ-002.status | "draft" | "superseded" |
CON-CRM-DQ-004.supersedes | [] | ["CON-CRM-DQ-005"] |
CON-CRM-DQ-005.status | "draft" | "superseded" |
JNY-CRM-DQ-003.steps.2.source | "react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0251.spec.ts#CRM-ACC-0251" | "services-crm:modules/merges/tests/integration/services/merges/approval-binding.integration.spec.js#refuses an execution that submits no hash too, because the stored plan is the one last shown" |
JNY-CRM-DQ-003.steps.3.provenance | "test" | "observed" |
JNY-CRM-DQ-003.steps.3.source | "services-crm:modules/merges/tests/integration/services/merges/approval-binding.integration.spec.js#refuses an execution that submits no hash too, because the stored plan is the one last shown" | "services-crm:modules/merges/services/merges/merge-plans.ts:readMergePlan" |
JNY-CRM-DQ-004.failures.0.provenance | "test" | "unknown" |
JNY-CRM-DQ-004.failures.0.source | "react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0271.spec.ts#CRM-ACC-0271" | "FND-CRM-DQ-031" |
JNY-CRM-DQ-005.steps.2.provenance | "test" | "observed" |
JNY-CRM-DQ-005.steps.2.source | "react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0241.spec.ts#CRM-ACC-0241" | "services-crm:modules/duplicates/services/detection/duplicate-checks.ts:refuseBlockedDuplicateCreate" |
JNY-CRM-DQ-005.steps.4.provenance | "test" | "observed" |
JNY-CRM-DQ-005.steps.4.source | "react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0241.spec.ts#CRM-ACC-0241" | "services-crm:modules/duplicates/services/detection/duplicate-detection.ts:detectForRecords" |
JNY-CRM-DQ-005.steps.5.provenance | "test" | "unknown" |
JNY-CRM-DQ-005.steps.5.source | "react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0245.spec.ts#CRM-ACC-0245" | "FND-CRM-DQ-031" |
JNY-CRM-DQ-005.assertions.AS-JNY-CRM-DQ-005-02.source | "react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0241.spec.ts#CRM-ACC-0241" | "services-crm:modules/duplicates/tests/unit/services/detection/duplicate-rule-actions.spec.js#stores the candidate for a block rule too, the block acting at the create and never on the queue (D-32)" |
Additional changes preserve the protected values while correcting their human explanation: the stale-preview journey attempts execution before refreshing the stored approval; organization approval changes when dependent identities or versions change; preview readability is stated as a product requirement with known fallbacks, rather than a blanket implementation guarantee; ordinary readable-label tests have a narrower expected result. Required proof is enabled for previously optional refusal, calculation and record-change rules, and acceptance coverage lists the remaining gaps.
Concept references now point to their active parent. Features group each active concept in its own home, while retired concept allocations remain permanent. Capability outcome lists retain their original cardinality; unsupported guarantees are expressed as recommendations or bounded observations. Evidence paths are source references, not new product requirements.
Disagreements left open
All findings remain open for Andrew or the responsible owner; this examination does not silently resolve product decisions. Existing findings retain their identities, severity and evidence except the participant-source separation recorded above. The finding register is the single home for the detailed disagreement, evidence and affected artifacts.
| Finding | Severity | Examination disposition |
|---|---|---|
FND-CRM-DQ-001 | medium | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-002 | low | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-003 | medium | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-004 | high | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-005 | medium | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-006 | medium | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-007 | low | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-008 | low | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-009 | medium | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-010 | medium | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-011 | medium | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-012 | medium | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-013 | low | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-014 | low | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-015 | low | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-016 | medium | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-017 | low | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-018 | medium | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-019 | low | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-020 | medium | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-021 | low | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-022 | medium | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-023 | low | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-024 | low | Retained; final wording rewritten and source anchor checked. |
FND-CRM-DQ-025 | medium | Added by independent examination; correction or proof limitation recorded above. |
FND-CRM-DQ-026 | medium | Added by independent examination; correction or proof limitation recorded above. |
FND-CRM-DQ-027 | medium | Added by independent examination; correction or proof limitation recorded above. |
FND-CRM-DQ-028 | low | Added by independent examination; correction or proof limitation recorded above. |
FND-CRM-DQ-029 | medium | Added by independent examination; correction or proof limitation recorded above. |
FND-CRM-DQ-030 | medium | Added by independent examination; correction or proof limitation recorded above. |
FND-CRM-DQ-031 | high | Added by independent examination; correction or proof limitation recorded above. |
FND-CRM-DQ-032 | medium | Added by independent examination; correction or proof limitation recorded above. |
FND-CRM-DQ-033 | high | Added by independent examination; correction or proof limitation recorded above. |
FND-CRM-DQ-034 | medium | Added by independent examination; correction or proof limitation recorded above. |
| Open question | Disposition |
|---|---|
| OQ-CRM-DQ-001 | Plan-editing authority still requires a product decision. |
| OQ-CRM-DQ-002 | Individual privacy removal still requires a product decision. |
| OQ-CRM-DQ-003 | Reporting survivor resolution still requires a product decision. |
| OQ-CRM-DQ-004 | Missing console controls still require a scope decision. |
| OQ-CRM-DQ-005 | Organization outcome events still require a product decision. |
Validation
The required dependency installation and corpus conformance command passed with zero errors. The documentation test suite passed all four tests, with no failures or skips. The source services and console were not changed or deployed. Verification and final-text rewrites were committed separately, with subsequent narrowly scoped corrections recorded as examination commits.
Verdict for Andrew
The examined layer is a sourced description of the pinned module within its registered scope, with unsupported claims downgraded and unresolved differences kept explicit. Its weakest areas are the inconsistent approval trail and browser acceptance evidence that is blocked, obsolete or broader than its assertions. Before design begins, the product should settle the recorded authority and scope questions, authorize the missing source coverage and replace the identified proof gaps with runnable tests.