- Shipped
- 2 Septemba 2026, 01:55 UTC
- Author
- Kamo
- Commit
- b8aedd9
QuoteContactMode gives a LeadMarket three answers: the lead's assigned agent (resolved per read, which is what every quote does today and what a null column means), one explicit person, or a choice made on each quote. The latter two are snapshotted onto Quote.contactMemberId when the quote is raised, so changing a market's mind never rewrites the contact a customer was already given, and a revision carries the snapshot forward — it is the same offer. QuoteService takes the resolved contact as an argument rather than reading it off the request body: this module reaches the lead only by soft id, and a value a client could set would let anyone be named on a document. Update honours it only when the caller passes one, which is how ADJUSTABLE_PER_QUOTE is enforced server-side rather than by the editor hiding a field. agentForMember is named rather than overloaded — agentFor(null, ...) would be ambiguous at any call site passing a literal null — and the lead-taking form now delegates to it, so the two cannot drift on a printed document.