---
title: CRM Regions Planning Examination
examined_at: 2026-10-23
examiner: codex
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
branch: agent/crm-regions-plan-exam-1
---

# CRM Regions Planning Examination

## Scope and Method

This OpenAI examination starts from corpus commit 28d07581f283a535fe72168c5c4b781194434711. Both source checkouts remain at the required pinned commits. Authoring occurs in the dedicated task worktree and commits remain on the assigned agent branch.

The authoring contract, planning templates, approved Entities examples and regional draft establish the document standard. The requested Regions planning brief is absent; the registered source scope and cited records supply the available examination boundary. No approval is inferred from implementation, historical passing runs or the existence of a test file.

The baseline contains 698 structured source, origin, intent and binding references, representing 342 distinct reference strings. Opening the referenced files at the pinned commits confirms their existence; named test titles are present as literal titles, including the final component of nested suite references. Compound statements are compared with schemas, persistence, matching, components and test assertions rather than treating a title as complete proof. Additional enforcing code replaces overstrong test provenance where a single assertion covers only part of a statement.

This examination does not execute the source repositories’ database or deployed browser suites. A binding means that a specification exists with relevant assertions, not that its workflow passes now. Recorded browser defects and incomplete bindings remain findings. The acceptance commands executed here test the documentation corpus and its checker.

## Counts Examined

| Kind | Count |
|---|---:|
| Existing regional artifacts, including charter and ledgers | 46 |
| Features | 4 |
| Broad concepts | 4 |
| Capabilities | 15 |
| Capability scenarios and edge cases | 40 |
| Journeys | 5 |
| Journey steps | 27 |
| Journey assertions | 11 |
| Acceptance sets | 15 |
| Acceptance scenarios | 101 |
| Rules before / after examination | 154 / 155 |
| Must-prove rules after examination | 108 |
| Acceptance scenarios retaining complete bindings | 89 |
| Proposed acceptance scenarios | 12 |
| Findings before / after examination | 16 / 23 |
| Open product questions | 2 |
| Shared actor rows extended | 1 |

The capability count is justified by outcomes rather than route or table count. Individual-policy maintenance supports a distinct API outcome alongside complete-policy authoring. The four concepts remain broad nouns with settings and sub-records treated as facets. Each concept is between 400 and 900 words and uses the six required sections; no new artifact kind or identifier series is introduced.

## Coverage Against the Pinned Sources

Coverage below means an artifact or indexed evidence line describes the item. It does not claim complete automated proof of every behavior.

| Measure | Covered / Total | Uncovered by Name |
|---|---|---|
| Regional business operations | 19 / 19 | None |
| Hosted regional data-job operations | 12 / 12 | None; execution belongs to the Data Job Engine |
| Generic regional health operation | 1 / 1 | None; public health access is evidence in the authorization manifest test |
| Regional tables | 5 / 5 | None |
| Regional permission keys | 6 / 6 | None |
| Registered regional handler instances | 6 / 6 | None; these use four distinct handler names |
| Owned regional state machines | 0 / 0 | None declared |
| Owned regional queues | 0 / 0 | None declared; shared change-event delivery carries regional work |
| Owned regional schedules | 0 / 0 | None declared |
| Regional service test files plus authorization and dev specifications | 21 / 21 | None missing from the artifact source index |
| Regional console unit and dev test files | 13 / 13 | None missing from the artifact source index |
| Hosted console routes | 2 / 2 | None |
| Prior regional configuration inventory capabilities | 3 / 3 | None; retained through supersedes |
| Must-prove rules with a scenario | 103 / 108 | The five remaining rules below are named in findings |
| Acceptance scenarios with retained bindings | 89 / 101 | Twelve proposed scenarios remain unbound |

The five must-prove rules covered by findings instead of scenarios are BR-CAP-CRM-REG-004-12, BR-CAP-CRM-REG-004-14, BR-CAP-CRM-REG-006-08, BR-CAP-CRM-REG-006-11 and BR-CAP-CRM-REG-007-07. They concern editor validation, version reset, geographic normalization, address presence and preview when assignment is disabled. The version-reset gap is FND-CRM-REG-018; the other gaps are FND-CRM-REG-022.

### Operations

| Operation | Home |
|---|---|
| createRegion | CAP-CRM-REG-001 |
| listRegions | CAP-CRM-REG-001 |
| getRegion | CAP-CRM-REG-001 |
| updateRegion | CAP-CRM-REG-001, CAP-CRM-REG-002 |
| patchRegion | CAP-CRM-REG-001, CAP-CRM-REG-002 |
| deleteRegion | CAP-CRM-REG-002 |
| getRegionAssignmentSettings | CAP-CRM-REG-003, CAP-CRM-REG-010 |
| updateRegionAssignmentSettings | CAP-CRM-REG-003, CAP-CRM-REG-004 |
| listRegionAssignmentRules | CAP-CRM-REG-005 |
| createRegionAssignmentRule | CAP-CRM-REG-005 |
| reorderRegionAssignmentRules | CAP-CRM-REG-005 |
| previewRegionAssignment | CAP-CRM-REG-007 |
| getRegionAssignmentRule | CAP-CRM-REG-005 |
| updateRegionAssignmentRule | CAP-CRM-REG-005 |
| patchRegionAssignmentRule | CAP-CRM-REG-005 |
| deleteRegionAssignmentRule | CAP-CRM-REG-005 |
| recalculateRegionAssignments | CAP-CRM-REG-011 |
| listRegionRecalculations | CAP-CRM-REG-012 |
| getRegionRecalculation | CAP-CRM-REG-012 |
| Submit, list, read, source-key lookup, results, rejections, apply, pause, resume, cancel, retry, conflict revalidation | CAP-CRM-REG-014 |

### Storage, Authority and Processing

| Item | Home or Evidence |
|---|---|
| crm.regions | CAP-CRM-REG-001, CAP-CRM-REG-002, CAP-CRM-REG-015 |
| crm.region_assignment_settings | CAP-CRM-REG-003, CAP-CRM-REG-010, CAP-CRM-REG-015 |
| crm.region_assignment_rules | CAP-CRM-REG-004, CAP-CRM-REG-005, CAP-CRM-REG-006 |
| crm.region_assignment_rule_postal_code_ranges | CAP-CRM-REG-004 |
| crm.region_recalculations | CAP-CRM-REG-011, CAP-CRM-REG-012 |
| crm.regions.read, create, update, delete, bulk, recalculate | CAP-CRM-REG-013; importing also uses CAP-CRM-REG-014 |
| region-assignment on contact and organization streams | CAP-CRM-REG-008 |
| region-assignment-override on contact and organization streams | CAP-CRM-REG-009 |
| linked-contact-region-assignment on organization stream | CAP-CRM-REG-008 |
| region-recalculation-runner on recalculation stream | CAP-CRM-REG-011, CAP-CRM-REG-012 |
| Regions and saved-policy tabs | CAP-CRM-REG-001, CAP-CRM-REG-003, CAP-CRM-REG-007, CAP-CRM-REG-010, CAP-CRM-REG-012 |
| Dedicated assignment-policy editor | CAP-CRM-REG-003, CAP-CRM-REG-004 |

A settings read without prior configuration returns defaults and performs no write. Creating the first individual rule materializes default settings before writing the rule. Whole-policy replacement recreates child rules; a region deactivation can increment the policy generation; assignment can change the owning contact or organization after a committed save; repeated recalculation starts can advance existing work. These side effects are represented in the capabilities rather than described as read-only or no-op behavior.

### Test-File Index

The following 44 files are indexed by rule or acceptance sources, including the 21 service and 13 console files counted above and ten additional acceptance journey specifications. Citation coverage is separate from execution status.

| Pinned Test File | Artifact Homes |
|---|---|
| react-console:acceptance/crm/playwright/journeys/adversarial/CRM-ACC-0749.spec.ts | CAP-CRM-REG-011, ATS-CRM-REG-011 |
| react-console:acceptance/crm/playwright/journeys/configuration/CRM-ACC-0357.spec.ts | CAP-CRM-REG-001, CAP-CRM-REG-003, CAP-CRM-REG-004, CAP-CRM-REG-007, CAP-CRM-REG-008, ATS-CRM-REG-010 |
| react-console:acceptance/crm/playwright/journeys/configuration/CRM-ACC-0360.spec.ts | CAP-CRM-REG-011, ATS-CRM-REG-011 |
| react-console:acceptance/crm/playwright/journeys/configuration/CRM-ACC-0361.spec.ts | CAP-CRM-REG-002, ATS-CRM-REG-002, ATS-CRM-REG-010 |
| react-console:acceptance/crm/playwright/journeys/configuration/CRM-ACC-0366.spec.ts | ATS-CRM-REG-013 |
| react-console:acceptance/crm/playwright/journeys/contacts/CRM-ACC-0023.spec.ts | CAP-CRM-REG-009, ATS-CRM-REG-009 |
| react-console:acceptance/crm/playwright/journeys/contacts/CRM-ACC-0058.spec.ts | ATS-CRM-REG-008 |
| react-console:acceptance/crm/playwright/journeys/data-operations/CRM-ACC-0649.spec.ts | ATS-CRM-REG-014 |
| react-console:acceptance/crm/playwright/journeys/organizations/CRM-ACC-0119.spec.ts | ATS-CRM-REG-008 |
| react-console:acceptance/crm/playwright/journeys/organizations/CRM-ACC-0120.spec.ts | ATS-CRM-REG-009 |
| react-console:components/regions/__tests__/assignment-draft.test.ts | CAP-CRM-REG-003, CAP-CRM-REG-004 |
| react-console:components/regions/__tests__/assignment-rules-editor.test.tsx | CAP-CRM-REG-003, CAP-CRM-REG-013 |
| react-console:components/regions/__tests__/assignment-rules-view.test.tsx | CAP-CRM-REG-003, ATS-CRM-REG-013 |
| react-console:components/regions/__tests__/editor-drawers.test.tsx | CAP-CRM-REG-001 |
| react-console:components/regions/__tests__/recalculation.test.tsx | CAP-CRM-REG-010, CAP-CRM-REG-011, CAP-CRM-REG-012 |
| react-console:components/regions/__tests__/regions-row-menu.test.tsx | CAP-CRM-REG-002, ATS-CRM-REG-002 |
| react-console:components/regions/__tests__/regions-screen.test.tsx | CAP-CRM-REG-002, ATS-CRM-REG-013 |
| react-console:components/regions/__tests__/rules-tab.test.tsx | CAP-CRM-REG-010 |
| react-console:components/regions/__tests__/tabs.test.ts | CAP-CRM-REG-003 |
| react-console:components/regions/__tests__/test-address-dialog.test.tsx | CAP-CRM-REG-007 |
| react-console:e2e/dev/regions.dev.spec.ts | CAP-CRM-REG-010, CAP-CRM-REG-013, ATS-CRM-REG-010, ATS-CRM-REG-013 |
| react-console:lib/configuration/regions-analysis.test.ts | CAP-CRM-REG-004 |
| react-console:lib/configuration/regions.test.ts | CAP-CRM-REG-001, ATS-CRM-REG-001 |
| services-crm:modules/regions/tests/e2e/regions.e2e.spec.js | CAP-CRM-REG-001, CAP-CRM-REG-002, CAP-CRM-REG-003, CAP-CRM-REG-004, CAP-CRM-REG-005, CAP-CRM-REG-007, CAP-CRM-REG-013, ATS-CRM-REG-001, ATS-CRM-REG-002, ATS-CRM-REG-003, ATS-CRM-REG-004, ATS-CRM-REG-005, ATS-CRM-REG-007, ATS-CRM-REG-008, ATS-CRM-REG-011, ATS-CRM-REG-012, ATS-CRM-REG-013 |
| services-crm:modules/regions/tests/integration/db/region-assignment-settings.table.integration.spec.js | CAP-CRM-REG-004, ATS-CRM-REG-003, ATS-CRM-REG-004 |
| services-crm:modules/regions/tests/integration/db/regions.table.integration.spec.js | CAP-CRM-REG-001, CAP-CRM-REG-002, ATS-CRM-REG-001, ATS-CRM-REG-002, ATS-CRM-REG-009 |
| services-crm:modules/regions/tests/integration/services/persistence/region-assignment-settings.integration.spec.js | CAP-CRM-REG-003, CAP-CRM-REG-004, CAP-CRM-REG-005, ATS-CRM-REG-003, ATS-CRM-REG-004, ATS-CRM-REG-005 |
| services-crm:modules/regions/tests/integration/services/persistence/region-assignment-settings.queries.integration.spec.js | CAP-CRM-REG-010, ATS-CRM-REG-003, ATS-CRM-REG-010 |
| services-crm:modules/regions/tests/integration/services/persistence/region-recalculations.integration.spec.js | CAP-CRM-REG-012, ATS-CRM-REG-011, ATS-CRM-REG-012 |
| services-crm:modules/regions/tests/integration/services/persistence/region-recalculations.queries.integration.spec.js | CAP-CRM-REG-011, CAP-CRM-REG-012, ATS-CRM-REG-011, ATS-CRM-REG-012 |
| services-crm:modules/regions/tests/integration/services/persistence/regions.integration.spec.js | CAP-CRM-REG-001, ATS-CRM-REG-001, ATS-CRM-REG-002 |
| services-crm:modules/regions/tests/integration/services/persistence/regions.queries.integration.spec.js | CAP-CRM-REG-001, ATS-CRM-REG-001 |
| services-crm:modules/regions/tests/integration/services/region-assignment/region-assignment-delivery.integration.spec.js | CAP-CRM-REG-008, ATS-CRM-REG-008 |
| services-crm:modules/regions/tests/integration/services/region-assignment/region-assignment-rules.integration.spec.js | CAP-CRM-REG-003, CAP-CRM-REG-006, CAP-CRM-REG-008, CAP-CRM-REG-010, ATS-CRM-REG-003, ATS-CRM-REG-006, ATS-CRM-REG-008, ATS-CRM-REG-010 |
| services-crm:modules/regions/tests/integration/services/region-assignment/region-assignment.integration.spec.js | CAP-CRM-REG-003, CAP-CRM-REG-006, CAP-CRM-REG-008, CAP-CRM-REG-009, CAP-CRM-REG-010, CAP-CRM-REG-011, ATS-CRM-REG-003, ATS-CRM-REG-004, ATS-CRM-REG-006, ATS-CRM-REG-008, ATS-CRM-REG-009, ATS-CRM-REG-010, ATS-CRM-REG-011 |
| services-crm:modules/regions/tests/integration/services/region-assignment/region-recalculation-errors.integration.spec.js | CAP-CRM-REG-012, ATS-CRM-REG-012 |
| services-crm:modules/regions/tests/legacy/rolodex-regions/tests/e2e/assign-region.e2e.spec.js | ATS-CRM-REG-008 |
| services-crm:modules/regions/tests/legacy/rolodex-regions/tests/e2e/recalculate-regions.e2e.spec.js | ATS-CRM-REG-011 |
| services-crm:modules/regions/tests/legacy/rolodex-regions/tests/integration/assign-region.int.spec.js | ATS-CRM-REG-008 |
| services-crm:modules/regions/tests/legacy/rolodex-regions/tests/unit/logic/assign-region.unit.spec.js | ATS-CRM-REG-003, ATS-CRM-REG-009 |
| services-crm:modules/regions/tests/legacy/rolodex-regions/tests/unit/logic/calculate-region.unit.spec.js | ATS-CRM-REG-006 |
| services-crm:modules/regions/tests/unit/region-matching.spec.js | CAP-CRM-REG-006, ATS-CRM-REG-006 |
| services-crm:tests/e2e/dev/regions.dev.spec.ts | ATS-CRM-REG-002, ATS-CRM-REG-008, ATS-CRM-REG-010, ATS-CRM-REG-011 |
| services-crm:tests/unit/regions-authorization.spec.ts | CAP-CRM-REG-002, CAP-CRM-REG-011, CAP-CRM-REG-013, CAP-CRM-REG-014, ATS-CRM-REG-002, ATS-CRM-REG-007, ATS-CRM-REG-011, ATS-CRM-REG-013, ATS-CRM-REG-014 |

## Corrections by Artifact

| Artifact | Verification Change |
|---|---|
| CAP-CRM-REG-004 | Add the rule version reset and its missing-proof finding; remove D-35 as confirmation of an entire save contract (the decision only governs conflict handling). |
| CAP-CRM-REG-006 | Correct address-presence gate and supply reasoning for the inferred reversed-range outcome. |
| CAP-CRM-REG-010 | Downgrade document-wide confirmation: cited records confirm selected outcomes, not every inherited rule; rule origins that actually cite decisions remain unchanged. |
| CAP-CRM-REG-011 | Downgrade document-wide confirmation: cited records confirm selected outcomes, not every inherited rule; rule origins that actually cite decisions remain unchanged. |
| CAP-CRM-REG-009 | Downgrade document-wide confirmation: cited records confirm selected outcomes, not every inherited rule; rule origins that actually cite decisions remain unchanged. |
| JNY-CRM-REG-003 | Downgrade document-wide confirmation: cited records confirm selected outcomes, not every inherited rule; rule origins that actually cite decisions remain unchanged. |
| CAP-CRM-REG-008 | Clarify that region assignment writes the contact record even though it does not write contact address rows; add inference reasoning. |
| CAP-CRM-REG-011 | Correct repeat-start side effects: startRegionRecalculation invokes runRegionRecalculation for existing runs too. |
| CAP-CRM-REG-015 | Explain the export omission inference. |
| JNY-CRM-REG-005 | Distinguish expiry alone from the later address event, which can clear the old region. |
| JNY-CRM-REG-001 | Move preview after saving and onto the tab that actually hosts it. |
| JNY-CRM-REG-004 | Align the retirement journey with its test: the test uses the drawer, removes the rule and clears contact references; it does not retarget and recalculate. |
| CAP-CRM-REG-001 | Use observed provenance and add the enforcing code for clauses the original single test does not prove. |
| CAP-CRM-REG-001 | Use observed provenance and add the enforcing code for clauses the original single test does not prove. |
| CAP-CRM-REG-002 | Use observed provenance and add the enforcing code for clauses the original single test does not prove. |
| CAP-CRM-REG-003 | Use observed provenance and add the enforcing code for clauses the original single test does not prove. |
| CAP-CRM-REG-003 | Use observed provenance and add the enforcing code for clauses the original single test does not prove. |
| CAP-CRM-REG-004 | Use observed provenance and add the enforcing code for clauses the original single test does not prove. |
| CAP-CRM-REG-004 | Use observed provenance and add the enforcing code for clauses the original single test does not prove. |
| CAP-CRM-REG-005 | Use observed provenance and add the enforcing code for clauses the original single test does not prove. |
| CAP-CRM-REG-008 | Use observed provenance and add the enforcing code for clauses the original single test does not prove. |
| CAP-CRM-REG-011 | Use observed provenance and add the enforcing code for clauses the original single test does not prove. |
| CAP-CRM-REG-012 | Use observed provenance and add the enforcing code for clauses the original single test does not prove. |
| ATS-CRM-REG-001 | Make proposed acceptance evidence prove the observed rule; keep the desired D-05, D-08 and permission-alignment changes as findings rather than contradictory expectations. |
| ATS-CRM-REG-002 | Make proposed acceptance evidence prove the observed rule; keep the desired D-05, D-08 and permission-alignment changes as findings rather than contradictory expectations. |
| ATS-CRM-REG-008 | Make proposed acceptance evidence prove the observed rule; keep the desired D-05, D-08 and permission-alignment changes as findings rather than contradictory expectations. |
| ATS-CRM-REG-010 | Make proposed acceptance evidence prove the observed rule; keep the desired D-05, D-08 and permission-alignment changes as findings rather than contradictory expectations. |
| ATS-CRM-REG-013 | Make proposed acceptance evidence prove the observed rule; keep the desired D-05, D-08 and permission-alignment changes as findings rather than contradictory expectations. |
| ATS-CRM-REG-002 | Unbind partial browser evidence: the deactivation test never checks the unused-region negative case; the import test checks id grammar but not blank-name or cross-workspace rows. |
| ATS-CRM-REG-014 | Unbind partial browser evidence: the deactivation test never checks the unused-region negative case; the import test checks id grammar but not blank-name or cross-workspace rows. |
| CAP-CRM-REG-002 | Picker behavior is an acceptance requirement with a known defect in the bound browser spec, not established implementation. |
| CAP-CRM-REG-004 | Mark BR-CAP-CRM-REG-004-12 must_prove: true; refusals and calculations require proof. |
| CAP-CRM-REG-006 | Mark BR-CAP-CRM-REG-006-08 must_prove: true; refusals and calculations require proof. |
| CAP-CRM-REG-006 | Mark BR-CAP-CRM-REG-006-11 must_prove: true; refusals and calculations require proof. |
| CAP-CRM-REG-006 | Mark BR-CAP-CRM-REG-006-12 must_prove: true; refusals and calculations require proof. |
| CAP-CRM-REG-007 | Mark BR-CAP-CRM-REG-007-07 must_prove: true; refusals and calculations require proof. |
| CAP-CRM-REG-013 | Correct alias scope: maintenance.operations.run has one regional key, rather than alternatives. |
| ATS-CRM-REG-002 | Classify the combined console deletion-control scenario at browser level. |
| ATS-CRM-REG-011 | Permission manifest inspection proves declaration at unit strength, not an API request. |
| ATS-CRM-REG-014 | Combined import-persona scenario includes browser evidence. |
| CON-CRM-REG-003 | Supply the reasoning required for the inferred affiliation relationship. |
| ATS-CRM-REG-001 | Remove partial binding: Missing-version refusal is not asserted by the bound replacement tests. |
| ATS-CRM-REG-005 | Remove partial binding: The bound append test does not exercise insertion at a requested position. |
| ATS-CRM-REG-008 | Remove partial binding: The deleted-in-flight test does not prove the update-lock skip. |
| ACTORS-CRM / ACT-CRM-003 | Add regional administration, catalogue maintenance and recalculation responsibilities with all six regional permission keys. Preserve other actor rows. Return the changed approved actor file to draft, remove approval stamps, increment its revision and pin the regional extension to the examined commits. |
| MOD-CRM-REG | Replace stale aggregate coverage with the report, clarify boundaries and refresh the feature, capability and journey indexes. Distinguish six handler instances from four names and preserve the hosted-route boundary. |
| ID_REGISTRY | Reserve seven examination findings before authoring, correct the version-reset allocation through an explicit erratum, retain the accidental unused reservation, preserve all existing identifiers and update display titles. |
| PRODUCT-AREAS / MOD-CRM-REG | Set this row alone to planning examined; retain its source scope. |

### Protected-Field Correction Ledger

These are the complete changes to the protected fields of existing planning rows relative to the starting draft. The additional version-reset rule is separately ledgered. The initial allocation accidentally advances the settings-rule series instead of the geographic-policy series; the unused reservation is retained permanently and the later ledger erratum records the correct rule. This is an allocation-before-authoring deviation, not an identifier renumbering. Unlisted identifiers, pins, supersedes values and protected values are retained.

| Artifact or Row Field | Previous Value | Examined Value |
|---|---|---|
| BR-CAP-CRM-REG-001-03.provenance | "test" | "observed" |
| BR-CAP-CRM-REG-001-03.source | "services-crm:modules/regions/tests/integration/services/persistence/regions.integration.spec.js#refuses an id the tenant already uses" | "services-crm:modules/regions/tests/integration/services/persistence/regions.integration.spec.js#refuses an id the tenant already uses; services-crm:modules/regions/services/persistence/regions.ts:createRegion" |
| BR-CAP-CRM-REG-001-08.provenance | "test" | "observed" |
| BR-CAP-CRM-REG-001-08.source | "services-crm:modules/regions/tests/e2e/regions.e2e.spec.js#the regions › answers 404 for this tenant's region read in another tenant, to a context that covers both" | "services-crm:modules/regions/tests/e2e/regions.e2e.spec.js#the regions › answers 404 for this tenant's region read in another tenant, to a context that covers both; services-crm:modules/regions/aws/api/regions.routes.ts:toWriteInput" |
| BR-CAP-CRM-REG-002-03.provenance | "test" | "observed" |
| BR-CAP-CRM-REG-002-03.source | "services-crm:tests/unit/regions-authorization.spec.ts#requires crm.regions.delete to delete a region" | "services-crm:tests/unit/regions-authorization.spec.ts#requires crm.regions.delete to delete a region; services-crm:modules/regions/aws/api/regions.routes.ts:regionsRoutes" |
| BR-CAP-CRM-REG-002-11.provenance | "test" | "documented" |
| BR-CAP-CRM-REG-002-11.source | "react-console:acceptance/crm/playwright/journeys/configuration/CRM-ACC-0373.spec.ts#CRM-ACC-0373" | "react-console:acceptance/crm/journeys/configuration/CRM-ACC-0373.json" |
| BR-CAP-CRM-REG-003-02.provenance | "test" | "observed" |
| BR-CAP-CRM-REG-003-02.source | "services-crm:modules/regions/tests/e2e/regions.e2e.spec.js#switches assignment on with an empty rule list, and reads back on with no rules" | "services-crm:modules/regions/tests/e2e/regions.e2e.spec.js#switches assignment on with an empty rule list, and reads back on with no rules; services-crm:modules/regions/services/persistence/region-assignment-settings.ts:assignsAutomatically" |
| BR-CAP-CRM-REG-003-09.provenance | "test" | "observed" |
| BR-CAP-CRM-REG-003-09.source | "services-crm:modules/regions/tests/integration/services/persistence/region-assignment-settings.integration.spec.js#the capability › leaves the saved rules as they were when a save is refused" | "services-crm:modules/regions/tests/integration/services/persistence/region-assignment-settings.integration.spec.js#the capability › leaves the saved rules as they were when a save is refused; services-crm:modules/regions/services/persistence/region-assignment-settings.ts:assertRegionAssignmentSettingsValid" |
| BR-CAP-CRM-REG-004-02.provenance | "test" | "observed" |
| BR-CAP-CRM-REG-004-02.source | "services-crm:modules/regions/tests/e2e/regions.e2e.spec.js#answers 400 for a postal code rule with no ranges" | "services-crm:modules/regions/tests/e2e/regions.e2e.spec.js#answers 400 for a postal code rule with no ranges; services-crm:modules/regions/services/persistence/region-assignment-settings.ts:regionAssignmentRuleProblems" |
| BR-CAP-CRM-REG-004-07.provenance | "test" | "observed" |
| BR-CAP-CRM-REG-004-07.source | "services-crm:modules/regions/tests/e2e/regions.e2e.spec.js#patches the rule to disabled" | "services-crm:modules/regions/tests/e2e/regions.e2e.spec.js#patches the rule to disabled; services-crm:modules/regions/services/persistence/region-assignment-settings.ts:regionAssignmentRuleProblems" |
| BR-CAP-CRM-REG-004-11.origin | "services-crm:docs/milestones/CRM-M3-crm-configuration.md#D-35" | "none" |
| BR-CAP-CRM-REG-004-12.must_prove | false | true |
| BR-CAP-CRM-REG-005-01.provenance | "test" | "observed" |
| BR-CAP-CRM-REG-005-01.source | "services-crm:modules/regions/tests/e2e/regions.e2e.spec.js#appends a created rule at the end of the order" | "services-crm:modules/regions/tests/e2e/regions.e2e.spec.js#appends a created rule at the end of the order; services-crm:modules/regions/services/persistence/region-assignment-settings.ts:createRegionAssignmentRule" |
| BR-CAP-CRM-REG-006-08.must_prove | false | true |
| BR-CAP-CRM-REG-006-11.must_prove | false | true |
| BR-CAP-CRM-REG-006-11.source | "services-crm:modules/regions/services/region-assignment/region-matching.ts:geographicAddressOf" | "services-crm:modules/regions/services/region-assignment/region-matching.ts:geographicAddressOf, hasAddress, matchRegionRule" |
| BR-CAP-CRM-REG-006-12.must_prove | false | true |
| BR-CAP-CRM-REG-007-07.must_prove | false | true |
| BR-CAP-CRM-REG-008-07.provenance | "test" | "observed" |
| BR-CAP-CRM-REG-008-07.source | "services-crm:modules/regions/tests/integration/services/region-assignment/region-assignment-delivery.integration.spec.js#a record deleted while its event was in flight › succeeds with nothing to do, because a record that is gone has no region to decide" | "services-crm:modules/regions/tests/integration/services/region-assignment/region-assignment-delivery.integration.spec.js#a record deleted while its event was in flight › succeeds with nothing to do, because a record that is gone has no region to decide; services-crm:modules/regions/services/region-assignment/region-assignment.ts:reconcileRegionAssignments" |
| CAP-CRM-REG-009.product_intent | "confirmed" | "proposed" |
| CAP-CRM-REG-010.product_intent | "confirmed" | "proposed" |
| CAP-CRM-REG-011.product_intent | "confirmed" | "proposed" |
| BR-CAP-CRM-REG-011-06.provenance | "test" | "observed" |
| BR-CAP-CRM-REG-011-06.source | "services-crm:modules/regions/tests/integration/services/region-assignment/region-assignment.integration.spec.js#rule changes and the recalculation › leaves a contact that overrides automatic assignment" | "services-crm:modules/regions/tests/integration/services/region-assignment/region-assignment.integration.spec.js#rule changes and the recalculation › leaves a contact that overrides automatic assignment; services-crm:modules/regions/services/region-assignment/region-assignment.ts:reconcileRegionAssignments" |
| BR-CAP-CRM-REG-012-09.provenance | "test" | "observed" |
| BR-CAP-CRM-REG-012-09.source | "react-console:components/regions/__tests__/recalculation.test.tsx#the banner › reports a failure, with what it got through before it stopped" | "react-console:components/regions/__tests__/recalculation.test.tsx#the banner › reports a failure, with what it got through before it stopped; react-console:components/regions/recalculation.tsx:useRecalculation" |
| ATS-CRM-REG-001-04.bound_to | ["services-crm:modules/regions/tests/e2e/regions.e2e.spec.js#the regions › answers 409 for a replace from a stale read","services-crm:modules/regions/tests/e2e/regions.e2e.spec.js#replaces the region at the version read","services-crm:modules/regions/tests/integration/services/persistence/regions.integration.spec.js#refuses a replace from a stale read"] | [] |
| ATS-CRM-REG-001-04.provenance | "test" | "proposed" |
| ATS-CRM-REG-001-04.source | "services-crm:modules/regions/tests/e2e/regions.e2e.spec.js#the regions › answers 409 for a replace from a stale read" | "FND-CRM-REG-022" |
| ATS-CRM-REG-002-03.level | "api" | "browser" |
| ATS-CRM-REG-002-05.bound_to | ["react-console:acceptance/crm/playwright/journeys/configuration/CRM-ACC-0361.spec.ts#CRM-ACC-0361"] | [] |
| ATS-CRM-REG-002-05.provenance | "test" | "proposed" |
| ATS-CRM-REG-002-05.source | "react-console:acceptance/crm/playwright/journeys/configuration/CRM-ACC-0361.spec.ts#CRM-ACC-0361" | "FND-CRM-REG-021" |
| ATS-CRM-REG-005-02.bound_to | ["services-crm:modules/regions/tests/e2e/regions.e2e.spec.js#the rules, one at a time › answers 409 for a replace from a stale read","services-crm:modules/regions/tests/e2e/regions.e2e.spec.js#replaces the rule at the version read","services-crm:modules/regions/tests/e2e/regions.e2e.spec.js#patches the rule to disabled"] | [] |
| ATS-CRM-REG-005-02.provenance | "test" | "proposed" |
| ATS-CRM-REG-005-02.source | "services-crm:modules/regions/tests/e2e/regions.e2e.spec.js#the rules, one at a time › answers 409 for a replace from a stale read" | "FND-CRM-REG-022" |
| ATS-CRM-REG-008-07.bound_to | ["services-crm:modules/regions/tests/integration/services/region-assignment/region-assignment-delivery.integration.spec.js#a record deleted while its event was in flight › succeeds with nothing to do, because a record that is gone has no region to decide"] | [] |
| ATS-CRM-REG-008-07.provenance | "test" | "proposed" |
| ATS-CRM-REG-008-07.source | "services-crm:modules/regions/tests/integration/services/region-assignment/region-assignment-delivery.integration.spec.js#a record deleted while its event was in flight › succeeds with nothing to do, because a record that is gone has no region to decide" | "FND-CRM-REG-022" |
| ATS-CRM-REG-011-01.level | "api" | "unit" |
| ATS-CRM-REG-014-01.level | "api" | "browser" |
| ATS-CRM-REG-014-03.bound_to | ["react-console:acceptance/crm/playwright/journeys/configuration/CRM-ACC-0364.spec.ts#CRM-ACC-0364"] | [] |
| ATS-CRM-REG-014-03.provenance | "test" | "proposed" |
| ATS-CRM-REG-014-03.source | "react-console:acceptance/crm/playwright/journeys/configuration/CRM-ACC-0364.spec.ts#CRM-ACC-0364" | "FND-CRM-REG-021" |
| JNY-CRM-REG-003.product_intent | "confirmed" | "proposed" |
| JNY-CRM-REG-004.steps[1].provenance | "test" | "observed" |
| JNY-CRM-REG-004.steps[1].source | "react-console:acceptance/crm/playwright/journeys/configuration/CRM-ACC-0361.spec.ts#CRM-ACC-0361" | "react-console:acceptance/crm/playwright/journeys/configuration/CRM-ACC-0361.spec.ts#CRM-ACC-0361; react-console:lib/configuration/regions-analysis.ts:analyzeRules" |
| JNY-CRM-REG-005.failures[0].source | "services-crm:modules/entities/services/persistence/contacts.ts:readContactRegionAddresses" | "services-crm:modules/entities/services/persistence/contacts.ts:readContactRegionAddresses; services-crm:modules/regions/services/region-assignment/region-assignment.ts:linkedContactRegionAssignmentHandler, reconcileRegionAssignments" |

## Final Text Pass

Every existing artifact receives final OpenAI wording. Each planning rewrite is committed independently of its verification changes. The final text pass rewrites titles, purposes, outcomes, scenario setup and results, rule statements, journey actions and assertions, concept definitions and facets, lifecycle descriptions, evidence summaries and prose. Rule and acceptance identifiers remain permanent. The final text removes unsourced decorative example details rather than treating them as additional implementation claims.

| Artifact | Final Text Work |
|---|---|
| FEAT-CRM-REG-01 | Grouping purpose and outcomes only |
| FEAT-CRM-REG-02 | Grouping purpose and outcomes only |
| FEAT-CRM-REG-03 | Grouping purpose and outcomes only |
| FEAT-CRM-REG-04 | Grouping purpose and outcomes only |
| CON-CRM-REG-001 | Broad noun, facets, relationships, lifecycle and six product sections |
| CON-CRM-REG-002 | Broad noun, facets, relationships, lifecycle and six product sections |
| CON-CRM-REG-003 | Broad noun, facets, relationships, lifecycle and six product sections |
| CON-CRM-REG-004 | Broad noun, facets, relationships, lifecycle and six product sections |
| CAP-CRM-REG-001 | Outcome, rule and illustration wording, operation narrative and dependencies |
| CAP-CRM-REG-002 | Outcome, rule and illustration wording, operation narrative and dependencies |
| CAP-CRM-REG-003 | Outcome, rule and illustration wording, operation narrative and dependencies |
| CAP-CRM-REG-004 | Outcome, rule and illustration wording, operation narrative and dependencies |
| CAP-CRM-REG-005 | Outcome, rule and illustration wording, operation narrative and dependencies |
| CAP-CRM-REG-006 | Outcome, rule and illustration wording, operation narrative and dependencies |
| CAP-CRM-REG-007 | Outcome, rule and illustration wording, operation narrative and dependencies |
| CAP-CRM-REG-008 | Outcome, rule and illustration wording, operation narrative and dependencies |
| CAP-CRM-REG-009 | Outcome, rule and illustration wording, operation narrative and dependencies |
| CAP-CRM-REG-010 | Outcome, rule and illustration wording, operation narrative and dependencies |
| CAP-CRM-REG-011 | Outcome, rule and illustration wording, operation narrative and dependencies |
| CAP-CRM-REG-012 | Outcome, rule and illustration wording, operation narrative and dependencies |
| CAP-CRM-REG-013 | Outcome, rule and illustration wording, operation narrative and dependencies |
| CAP-CRM-REG-014 | Outcome, rule and illustration wording, operation narrative and dependencies |
| CAP-CRM-REG-015 | Outcome, rule and illustration wording, operation narrative and dependencies |
| JNY-CRM-REG-001 | Actor goal, actions, results, branches, assertions and narrative |
| JNY-CRM-REG-002 | Actor goal, actions, results, branches, assertions and narrative |
| JNY-CRM-REG-003 | Actor goal, actions, results, branches, assertions and narrative |
| JNY-CRM-REG-004 | Actor goal, actions, results, branches, assertions and narrative |
| JNY-CRM-REG-005 | Actor goal, actions, results, branches, assertions and narrative |
| ATS-CRM-REG-001 | Scenario title, setup, steps, expected result, fixture wording and coverage presentation |
| ATS-CRM-REG-002 | Scenario title, setup, steps, expected result, fixture wording and coverage presentation |
| ATS-CRM-REG-003 | Scenario title, setup, steps, expected result, fixture wording and coverage presentation |
| ATS-CRM-REG-004 | Scenario title, setup, steps, expected result, fixture wording and coverage presentation |
| ATS-CRM-REG-005 | Scenario title, setup, steps, expected result, fixture wording and coverage presentation |
| ATS-CRM-REG-006 | Scenario title, setup, steps, expected result, fixture wording and coverage presentation |
| ATS-CRM-REG-007 | Scenario title, setup, steps, expected result, fixture wording and coverage presentation |
| ATS-CRM-REG-008 | Scenario title, setup, steps, expected result, fixture wording and coverage presentation |
| ATS-CRM-REG-009 | Scenario title, setup, steps, expected result, fixture wording and coverage presentation |
| ATS-CRM-REG-010 | Scenario title, setup, steps, expected result, fixture wording and coverage presentation |
| ATS-CRM-REG-011 | Scenario title, setup, steps, expected result, fixture wording and coverage presentation |
| ATS-CRM-REG-012 | Scenario title, setup, steps, expected result, fixture wording and coverage presentation |
| ATS-CRM-REG-013 | Scenario title, setup, steps, expected result, fixture wording and coverage presentation |
| ATS-CRM-REG-014 | Scenario title, setup, steps, expected result, fixture wording and coverage presentation |
| ATS-CRM-REG-015 | Scenario title, setup, steps, expected result, fixture wording and coverage presentation |
| MODULE, ID_REGISTRY, FINDINGS | Charter and indexes, allocation explanations, all finding statements and both product questions are rewritten. |
| ACT-CRM-003 | The regional extension uses final OpenAI wording; other shared actor rows retain their existing text. |

## Remaining Disagreements

| Finding | Remaining Work Before Approval |
|---|---|
| FND-CRM-REG-001 | Decide inactive-target policy through OQ-CRM-REG-001. |
| FND-CRM-REG-002 | Implement or explicitly revise the recorded audited lock policy. |
| FND-CRM-REG-003 | Reconcile current-version and unchanged-save behavior with D-05. |
| FND-CRM-REG-004 | Align regional console gates with exact backend authority. |
| FND-CRM-REG-005 | Decide whether applicability labels should constrain service choices. |
| FND-CRM-REG-006 | Decide whether both policy editing APIs remain necessary and coordinate their versions. |
| FND-CRM-REG-007 | Refresh historical comments and references in the owning source repositories. |
| FND-CRM-REG-008 | Decide whether affiliation expiry triggers placement reconciliation. |
| FND-CRM-REG-009 | Clarify the examined counter’s meaning across processing paths. |
| FND-CRM-REG-010 | Decide whether cancellation and final-failure recovery need additional controls. |
| FND-CRM-REG-011 | Resolve unused rule-lock fields in design. |
| FND-CRM-REG-012 | Supply complete automated proof for the identified refusals and side effects. |
| FND-CRM-REG-013 | Execute selected live journeys and reconcile their catalogue execution status. |
| FND-CRM-REG-014 | Decide reversed postal interval validation through OQ-CRM-REG-002. |
| FND-CRM-REG-015 | No remaining path correction in this corpus; retain the finding as the examination record. |
| FND-CRM-REG-016 | Obtain approval of the proposed shared administrator extension. |
| FND-CRM-REG-017 | Recover the absent planning brief or accept the registered scope as the examination boundary. |
| FND-CRM-REG-018 | Preserve rule versions across whole-list replacement and prove the stale-edit interleaving. |
| FND-CRM-REG-019 | No remaining journey correction; decide separately whether unsaved preview is a future feature. |
| FND-CRM-REG-020 | Correct regional contact-choice and display defects before relying on the browser journey. |
| FND-CRM-REG-021 | Bind the complete deactivation and imported-row scenarios to adequate tests. |
| FND-CRM-REG-022 | Provide the complete acceptance scenarios and assertions identified by the proof review. |
| FND-CRM-REG-023 | No remaining description correction; prove or design the repeat-start and later-expired-link event behavior explicitly. |

## Validation

The required command `npm ci && npm run check` succeeds with zero conformance errors. `npm test` passes all four checker tests with no failures. Validation is repeated after writing this report and before the final commit; source code, deployment configuration and reader files are outside the changes.

## Verdict for Andrew

The examined planning layer describes the pinned regional implementation with sourced corrections and explicit findings, while retaining proposed product authority wherever records do not confirm the full behavior. Its weakest areas are lock reversibility, policy version resets, inactive-target retirement and incomplete automated proof, including known contact-screen defects. Before design starts, decide the two open product questions, approve or revise the regional actor extension, and assign the identified contract and proof gaps so design does not assume they are resolved.
