- Shipped
- August 5, 2026 at 6:02 PM UTC
- Author
- Kamo
- Commit
- d95ea47
Adds the spine the lead Communications tab reads from. LEAD_CONTACT_POINTS records every phone number and e-mail a lead has ever had, as a window with activeFrom/activeTo. LEAD_COMMUNICATIONS records the durable link between a lead and one call, voicemail, text or e-mail, written at the moment it happens against the contact points live at that moment — so changing a lead's number binds future traffic only and leaves history exactly as it was. PHONE_CALL_LOG is the call record the platform never had: RECORDINGS only has a row when audio was captured, so missed and un-recorded calls left no trace. ContactCanon is the single definition of "the same number" for the whole platform; LeadController.canonicalPhone now delegates to it so reverse lookup and communication matching cannot disagree. LeadContactPointService and LeadCommunicationLinker are deliberately NOT stereotypes — a shared-lib @Service needing a repository fails context startup in every service that has not added the package, which has taken production down three times. The owning services declare the beans; LeadService takes them @Autowired(required=false) so it still wires everywhere else.