01must proveConfirmed | A replacement supplies the read version and a patch begins by testing it; omission is rejected at sys_version, and a stale version produces a conflict identifying the latest person or system change. ✓ Accepted example: a patch led by test /sys_version at the current version is applied and advances it once.✗ Rejected example: two patches at the same version: the second is rejected 409 and the first writer's value is preserved. proved by ATS-CRM-ENT-001-19, ATS-CRM-ENT-002-12, ATS-CRM-ENT-004-01, ATS-CRM-ENT-004-14, ATS-CRM-ENT-004-15, ATS-CRM-ENT-004-18, ATS-CRM-ENT-004-19, ATS-CRM-ENT-004-20, ATS-CRM-ENT-004-21, ATS-CRM-ENT-004-22, ATS-CRM-ENT-004-24, ATS-CRM-ENT-006-12, ATS-CRM-ENT-009-17, ATS-CRM-ENT-009-19, ATS-CRM-ENT-013-13, ATS-CRM-ENT-015-10, TST-CRM-ENT-648, TST-CRM-ENT-656 | validation | api, service | test |
02must proveConfirmed | An unchanged save preserves version, modification time and history, but still rejects a stale version. | invariant | service | test |
03must proveProposed | A patch modifies the stored record before validating the whole result, preserves unnamed properties and clears nullable values when explicitly set to null. | policy | api, service | test |
04must proveConfirmed | Replacement clears omitted editable scalar values and omitted e-mail, phone, address and communication-preference collections while retaining server-owned data and collections governed by explicit preservation rules. ✓ Accepted example: a replacement without job_title clears it.✗ Rejected example: a replacement without addresses removes every address. | policy | service | test |
05must proveProposed | An explicit collection preserves and versions changed elements by their own ids, creates idless elements, removes omitted elements, rejects foreign or duplicate ids and allows elements to exchange types or preferred flags in one save. | invariant | api, service, database | test |
06must proveConfirmed | Round-trip writes accept unchanged contact names, numbers, attribution, locks and origin values but reject changes to those read-only values, ignore derived organization ancestry and compliance values, and reject a conflicting tenant id. | validation | api, service | test |
07must proveProposed | A failed contact or organization save leaves the record, its elements, custom values and affiliations at their previous state regardless of the failing validation, constraint, file, lock or version check. | invariant | service, database | test |
08must proveProposed | Validation refusals collect the problems detected in one response and identify each problem’s field path. | validation | service | test |
09must proveConfirmed | Input strings are trimmed, blank optional values become empty, blank required values are rejected and blank collection elements are omitted. | calculation | api, database | test |
10must proveConfirmed | System changes to spouse links, regions or compliance advance the record version and make an open editor’s next save conflict with attribution to the system. | policy | service, console | test |
11must proveProposed | The contact editor reviews changes before sending a version-tested patch of changed fields and offers reload or comparison after a conflict without silently accepting a newer version through Keep Editing. | policy | console | test |
12Proposed | The product should keep unsaved changes during session refresh and validate the original version when restoring an editor draft. | policy | | documented |
13must proveConfirmed | A whole-record save of a contact or organization must include every replaceable property. A save that omits one is refused and names the missing property, null clears a value, and a read states its empty properties as null so that a record read back can be saved unchanged. ✓ A replacement that names every replaceable property, with null for the ones to clear, is saved.✗ A replacement that omits job_title is refused naming job_title; nothing is written. origin: OQ-CRM-ENT-001 decided 2026-10-22 by Andrew: A (require complete payloads, as Activities already do); not yet implemented for these records, see FND-CRM-ENT-004 | policy | api, service | documented |