Link a portal member to a contact
What It Does
Likely matching separates candidate selection, possession proof and the eventual member/contact link. Candidate offers are sealed, while challenge storage retains a digest and bounded attempts.
The Flow
The diagram separates the relevant success, alternative and failure paths. The numbered hop rows retain the detailed authority checks, delegated work and retry limits.
When Something Fails
CRM calls use separate transactions from Security writes. Creating a contact does not guarantee the later membership link succeeds. Delivery failure spends the challenge where possible, and unlinked created contacts or possible duplicates remain explicit reconciliation work.
Existing linked membership returns the link. Sequential challenge replacement supersedes visible earlier rows and link writes refuse a visible existing contact claim. Concurrent exclusion across different member rows or simultaneous empty challenge sets is unknown. CRM creation remains separate from the later link write.
Operations act on the caller’s membership. Challenge attempts lock their own row; different members claiming one contact do not share that row lock. The conditional absence check and non-unique contact index do not prove concurrent exclusion. CRM creation can commit before an uncompleted member link.
Open Design Questions
The recorded findings retain any stronger planning expectation, missing writer or unproved recovery path. Observed behavior does not approve those outstanding product choices.